很简陋,没有做输入校验,以写出来为第一目的,中间出了不少问题,尤其是结构体内字符串赋值的时候(理解不透彻),字符串比较用strcmp不能直接==判定,逻辑也很重要,不然会出现莫名其妙的问题。

涉及知识:结构体 数组 字符串

  1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <ctype.h>
5
6 #define NAME_MAX_LEN 20
7 #define STUDENTS_MAX_NUMBER 100
8
9 typedef struct
10 {
11 int stuId;
12 char name[NAME_MAX_LEN];
13 int score;
14 int flag;
15 int age;
16 } Student;
17
18 int add(Student stu, Student stus[])
19 {
20 for(int i=0; i<STUDENTS_MAX_NUMBER; i++)
21 {
22 if(stus[i].flag == 0)
23 {
24 // stus[i].name = stu.name; 刚开始这么写有问题,stus[i].name时字符串常量不能在=左边
25 strcpy(stus[i].name,stu.name);
26 stus[i].score = stu.score;
27 stus[i].age = stu.age;
28 stus[i].flag = 1; // 当前学生属性设置完毕,改变状态
29 return 0;
30 }
31 }
32 return 1;
33 }
34
35 int update(Student stu, Student stus[])
36 {
37 for(int i=0; i<STUDENTS_MAX_NUMBER; i++)
38 {
39 if(strcmp(stus[i].name,stu.name) == 0) // 之前直接用 == 判断,不报错,运用有bug,找了半天问题
40 {
41 stus[i].score = stu.score;
42 return 0;
43 }
44 }
45 return 1;
46 }
47
48 int search(Student stu, Student stus[])
49 {
50 for(int i=0; i<STUDENTS_MAX_NUMBER; i++)
51 {
52 if(strcmp(stus[i].name,stu.name) ==0 && stus[i].flag == 1)
53 {
54 fprintf(stdout,"学号:%d 姓名:%s 分数:%d 年龄:%d\n",stus[i].stuId,stu.name,stu.score,stu.age);
55 return 0;
56 }
57 }
58 fprintf(stdout,"查无此人!\n");
59 return 1;
60 }
61
62 int delete(Student stu, Student stus[])
63 {
64 for(int i=0; i<STUDENTS_MAX_NUMBER; i++)
65 {
66 if(strcmp(stus[i].name,stu.name) == 0)
67 {
68 stus[i].flag = 0;
69 return 0;
70 }
71 }
72 fprintf(stdout,"该学生不存在!\n");
73 return 1;
74 }
75
76 int showlist(Student stus[])
77 {
78 fprintf(stdout,"**************************\n");
79 fprintf(stdout,"学生名单\n");
80 for(int i=0; i<STUDENTS_MAX_NUMBER; i++)
81 {
82 if(stus[i].flag == 1)
83 {
84 fprintf(stdout,"学号:%d 姓名:%s 分数:%d 年龄:%d\n",stus[i].stuId,stus[i].name,stus[i].score,stus[i].age);
85 }
86 }
87 fprintf(stdout,"**************************\n");
88 return 0;
89 }
90
91 int main(void)
92 {
93 int option;
94 int tag = 1;
95 Student stu;
96 Student stus[STUDENTS_MAX_NUMBER]; // 结构体数组
97
98 for(int i=0; i<STUDENTS_MAX_NUMBER; i++) //所有学生id和状态初始化
99 {
100 stus[i].stuId = i;
101 stus[i].flag = 0;
102 }
103
104 while(tag)
105 {
106 fprintf(stdout,"===========================\n");
107 fprintf(stdout,"欢迎进入学生管理系统\n\n");
108 fprintf(stdout,"1:添加\n\n");
109 fprintf(stdout,"2:修改分数\n\n");
110 fprintf(stdout,"3:学生个人信息查询\n\n");
111 fprintf(stdout,"4:删除\n\n");
112 fprintf(stdout,"5:显示学生名单\n\n");
113 fprintf(stdout,"0:退出系统\n\n");
114 fprintf(stdout,"===========================\n");
115 fprintf(stdout,"请输入选项:");
116
117 //option = getchar();
118 scanf("%d",&option);
119 switch(option)
120 {
121 case 1:
122 fprintf(stdout,"请输入学生姓名:");
123 scanf("%s",stu.name);
124 fprintf(stdout,"请输入学生分数:");
125 scanf("%d",&stu.score);
126 fprintf(stdout,"请输入学生年龄:");
127 scanf("%d",&stu.age);
128 add(stu,stus);
129 break;
130 case 2:
131 fprintf(stdout,"请输入学生姓名:");
132 scanf("%s",stu.name);
133 fprintf(stdout,"请输入新的分数:");
134 scanf("%d",&stu.score);
135 update(stu,stus);
136 break;
137 case 3:
138 fprintf(stdout,"请输入要查询学生姓名:");
139 scanf("%s",stu.name);
140 search(stu,stus);
141 break;
142 case 4:
143 fprintf(stdout,"请输入要删除学生姓名:");
144 scanf("%s",stu.name);
145 delete(stu,stus); // 当前学生标记状态标记为0
146 break;
147 case 5:
148 showlist(stus);
149 break;
150 case 0:
151 tag = 0;
152 break;
153 default:
154 fprintf(stdout,"输入选项有误,请重新输入!\n\n");
155 break;
156 }
157 }
158
159 exit(0);
160 }

C语言小练习 微型学生管理系统的更多相关文章

  1. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  2. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  3. 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念

    1 成绩管理系统概述 1.1  管理信息系统的概念  管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...

  4. #007 C语言大作业学生管理系统第四天

    第四天还差恢复已删除学生功能 对于我来说,已经开始很复杂了. 小细节太重要了,边写边出错 1 #include<stdio.h> #include<stdlib.h> #inc ...

  5. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  6. c语言之学生管理系统

    0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...

  7. 学生管理系统(C语言简单实现)

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...

  8. #004 C语言大作业学生管理系统试着做

    链表不会用 文件不会使 在这种情况下就边写边做 希望这个月能做完这个作业 #include<stdio.h> #include<stdlib.h> #include<st ...

  9. C语言小程序-基于链表的学生信息管理

    程序支持增加.查询.删除.存盘和读取操作 一 程序定义和函数声明 头文件studentsys.h定义如下 /* student management system by list */ #ifndef ...

随机推荐

  1. Beta阶段第六次会议

    第六次会议 时间:2020.5.22 完成工作 姓名 任务 难度 完成度 xyq 1.编写技术博客 中 90% ltx 1.编写小程序2.添加全局变量之后页面无法加载的bug 中 90% lm(迟到) ...

  2. numpy读取本地数据和索引

    1.numpy读取数据 np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) 做一个 ...

  3. 21.7.24 test

    \(NOIP\) 模拟赛 考差了. T1签到题.注意存在字符串长度为0,不能直接模.\(100\rightarrow0\) 代码: #include<bits/stdc++.h> usin ...

  4. 身份证归属地查询免费api接口

    描写叙述 :依据身份证编号 查询归属地信息. 调用地址: http://api.k780.com:88/? app=idcard.get&idcard=510103195309280011&a ...

  5. jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例

    本文实例讲述了jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能.分享给大家供大家参考,具体如下: 弹出层:两种方式 一是打开网页就自动弹出层二是点击弹出 <!DOCTYPE html ...

  6. Django(73)django-debug-toolbar调试工具

    介绍 Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息. 应用 1. 安装 ...

  7. 在Ubuntu下的C语言编程

    以运行在虚拟机下的Ubuntu为例: mkdir fenchen 来创建一个文件夹 cd fenchen 切换到这个文件夹下面 vi test.c 创建并编辑一个test.c文件 按 i 编辑,之后把 ...

  8. 正则表达式之grep

    grep 的五个参数,基本的常用的: -a :将 binary 档案以 text 档案的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺 ...

  9. JavaScript正则表达式replace的一个坑

    题图来自:https://wallhaven.cc/w/md353k 经常听大家说JavaScript是魔法语言,咱却没有什么深刻体会.直到这回踩到这个坑,我终于醒悟了,JavaScript果然来自霍 ...

  10. TCP/IP概述(网络互联与TCP/IP)

    TCP/IP概述(网络互联与TCP/IP) 用IP实现异构网络互联 从用户角度如何实现异构网络互联: 从用户角度看,实现异构网络互联的关键点就是使各种网络类型之间的差异对自己透明.在TCP/IP协议中 ...