C语言小练习 微型学生管理系统
很简陋,没有做输入校验,以写出来为第一目的,中间出了不少问题,尤其是结构体内字符串赋值的时候(理解不透彻),字符串比较用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语言小练习 微型学生管理系统的更多相关文章
- 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 ...
- 学生管理系统-火车订票系统 c语言课程设计
概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...
- 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念
1 成绩管理系统概述 1.1 管理信息系统的概念 管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...
- #007 C语言大作业学生管理系统第四天
第四天还差恢复已删除学生功能 对于我来说,已经开始很复杂了. 小细节太重要了,边写边出错 1 #include<stdio.h> #include<stdlib.h> #inc ...
- #006 C语言大作业学生管理系统第三天
还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...
- c语言之学生管理系统
0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...
- 学生管理系统(C语言简单实现)
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...
- #004 C语言大作业学生管理系统试着做
链表不会用 文件不会使 在这种情况下就边写边做 希望这个月能做完这个作业 #include<stdio.h> #include<stdlib.h> #include<st ...
- C语言小程序-基于链表的学生信息管理
程序支持增加.查询.删除.存盘和读取操作 一 程序定义和函数声明 头文件studentsys.h定义如下 /* student management system by list */ #ifndef ...
随机推荐
- [对对子队]Beta阶段项目展示博客
Beta阶段项目展示博客 1 团队成员的简介和个人博客地址 成员 头像 岗位 博客 个人介绍 黄贤昊 PM 17373253 喜欢玩游戏和做游戏,项目经验基本都和游戏相关,擅长摸鱼,偶尔敬业. 吴桐雨 ...
- 第4次 Beta Scrum Meeting
本次会议为Beta阶段第4次Scrum Meeting会议 会议概要 会议时间:2021年6月4日 会议地点:「腾讯会议」线上进行 会议时长:0.5小时 会议内容简介:对完成工作进行阶段性汇报:对下一 ...
- eureka服务端的高可用
eureka client的高可用这个很简单,只需要向eureka服务端上多注册几个实例即可,那么eureka server端如何实现高可用呢?其实eureka server 端也是可以做为一个客户端 ...
- GitHub Universe 2021|MS Reactor 邀你共聚年度盛会
GitHub Universe 2021 将于2021年10月27-28日(PDT)在线直播,MS Reactor 将与 CSDN 合作进行转播,与你一同观看这场全球开发者盛会. 关于 GitHub ...
- advanced base-scripting guide in chinese(高级Bash脚本编程指南-10)
<高级Bash脚本编程指南>Revision 10中文版 github上链接地址: https://github.com/LinuxStory/Advanced-Bash-Scriptin ...
- 全志TinaLinux编译错误fatal error: unicode/ucnv.h: No such file or directory
今天开始正式干活了 拿到一个全志Tina的板子还有一个SDK压缩包,要求我这周(只剩一天半...)就要把sdk编译通过并且把板子跑起来. 还特别跟我说他们试了下这个sdk编译没法通过,会报错... 竟 ...
- Java中Lambda表达式的进化之路
Lambda表达式的进化之路 为什么要使用Lambda表达式 可以简洁代码,提高代码的可读性 可以避免匿名内部类定义过多导致逻辑紊乱 在原先实现接口抽象方法的时候,需要通过定义一个实现接口的外部类来实 ...
- SpringCloud微服务实战——搭建企业级开发框架(十五):集成Sentinel高可用流量管理框架【熔断降级】
Sentinel除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积.Sentinel ...
- Java多线程之Atomic:原子变量与原子类
Atomic简介 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类这个包里面提供了一组原子变量类. 其基本的特性就是在多线程 ...
- IDEA Dao层快速跳转Mapper.xml 文件的插件
1.Idea 窗口→File→Setting→Plugins, 2.搜索 Free MyBatis plugin, install,等待安装完成后,Restart IDEA .