很简陋,没有做输入校验,以写出来为第一目的,中间出了不少问题,尤其是结构体内字符串赋值的时候(理解不透彻),字符串比较用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. AIApe问答机器人Scrum Meeting 4.29

    Scrum Meeting 4 日期:2021年4月29日 会议主要内容概述:汇报两日工作,讨论任务优先级. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 李明 ...

  2. UltraSoft - Beta - Scrum Meeting 2

    Date: May 18th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 建立Beta仓库管理增加服务器部署和Git协作文档 Liuzh 前端 查阅响应式布 ...

  3. [luogu2973]driving out the piggies 驱逐猪猡【高斯消元+概率DP】

    看到题面的那一刻,我是绝望的ORZ 图论加概率期望加好像不沾边的高斯消元???我人直接傻掉 还没学过概率期望的我果断向题解屈服了(然后还是傻掉了两节课来找线性方程.. Description 奶牛们建 ...

  4. 2021 ICPC Gran Premio de Mexico 2da Fecha部分题题解

    前面的水题,在队友的配合下,很快就拿下了,剩下几道大毒瘤题,一直罚座三个小时,好让人自闭...但不得不说,这些题的质量是真的高! H. Haunted House 首先看这个题,大眼一扫,觉得是某种数 ...

  5. centos7 二进制安装mysql-8.0.19

    安装包下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz 1.检 ...

  6. 使用Magisk+riru实现全局改机

    前言 提到全局改机,我们想到修改的不是修改Android源码就是利用Xposed改机,前者成本太高,后者只能修改Java层的数据不够彻底.magisk是Android平台上功能强大的工具,利用它可以随 ...

  7. dart系列之:dart语言中的变量

    目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...

  8. ORACLE,mysql中替换like的函数

    数据库中存储了海量的数据,当查询时使用like,速度明显变慢.我在做项目时,发现使用内部函数INSTR,代替传统的LIKE方式查询,并且速度更快. INSTR()函数返回字符串中子字符串第一次出现的位 ...

  9. 4.ASCII码排序

    描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之 ...

  10. 巧用Python快速构建网页服务器

    经常做web开发,要调试一个网页,直接打开文件,用file模式显然是业余的. 但动辄要部署个IIS或APACHE站点,也确实太累,怎么办? 逐浪君此前有分享过通过http-server来构建快速的we ...