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

    什么是反射 官方关于反射定义: Reflection in computing is the ability of a program to examine its own structure, pa ...

  2. “妈妈再也不用担心我忘交作业了!”——记2020BUAA软工团队项目选择

    写在前面 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 团队项目选择 项目简介 项目名称:北航学生资源整合和作业提醒平台 项目内容: 设计实现一 ...

  3. 带你用AVPlayer实现音频和视频播放

    项目概述 以下项目是基于AVPlayer的实际运用,实现音频播放.横竖屏视频切换播放.类似抖音的竖屏全屏播放效果. 项目地址:AVPlayerAudioVideo 如果文章和项目对你有帮助,还请给个S ...

  4. Noip模拟41 2021.8.16

    T1 你相信引力吗 对于区间的大小关系问题,往往使用单调栈来解决 这道题的优弧和劣弧很烦,考虑将其等价的转化 由于所有的合法情况绕过的弧都不会经过最高的冰锥, 又因为环可以任意亲定起点,这样可以直接把 ...

  5. 万维网www与HTTP协议

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105901440 学习课程:<2019王道考研计算机网络> 学习目的 ...

  6. 链地址法查找成功与不成功的平均查找长度ASL

    晚上,好像是深夜了,突然写到这类题时遇到的疑惑,恰恰这个真题只让计算成功的ASL,但我想学一下不成功的计算,只能自己来解决了,翻了李春葆和严蔚敏的教材没有找到相关链地址法的计算,于是大致翻到两篇不错的 ...

  7. NOIP模拟86(多校19)

    T1 特殊字符串 解题思路 \(f_{i,j}\) 表示前 \(i\) 个字符中结尾为 \(j\) 的最大贡献. 转移枚举当前位置于之前位置结尾的组合加上贡献即可. 对于边界问题,容易发现选择 1 一 ...

  8. Ubuntu 16.04 菜单栏 换位置 挪到左边 挪到下边

    Ubuntu菜单栏的位置可以调 到左侧 或者底部 调整到底部 $ gsettings set com.canonical.Unity.Launcher launcher-position Bottom ...

  9. Ubuntu16.04安装apache hive

    0.常规配置操作可参照以下网址: 0.1 Ubuntu安装hive,并配置mysql作为元数据库http://dblab.xmu.edu.cn/blog/install-hive/ ------以下为 ...

  10. Mac 搭建后端PHP+Go环境

    准备工作 1. 安装brew命令 #很慢很慢.. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...