首页 / C语言 / C语言编写学生信息管理系统
C语言编写学生信息管理系统
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言编写学生信息管理系统,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8210字,纯文字阅读大概需要12分钟。
内容图文
![C语言编写学生信息管理系统](/upload/InfoBanner/zyjiaocheng/1056/ed9abf8fcb664bc1bab18f9dd70df8c9.jpg)
学完C语言,自己想着编写一个学生信息管理系统,既可以巩固C语言知识,也能体验怎么合理地设计和实现一个项目。
设计比较简陋,希望各位大佬多多批评,多多指教!
这个系统最重要的便是主要功能框架,在主函数中用switch()多分支选择结构实现。
我是链表实现,代码如下:
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include<malloc.h>
5 #include<stdbool.h>
6 7#define len sizeof(Student)
8 9struct Student{
10char ID[11];
11char name[10];
12int age;
13char sex[2];
14int Grade;
15 Student *Next;
16};
17 18 Student *Head = NULL;//全局变量,是整个链表的开头 19 20void Createlist();
21bool Whetherlistempty();
22 Student *Createlist(int n);
23 Student *AddNode(int n);
24bool Whetherlistempty();
25 Student * Insertnode(Student *Head, Student *newnode);
26 Student *Deleteinformation();
27 Student *DeleteNode(Student * Head, char id[]);
28void Display();
29 Student *ReviseNode(Student* Head, char id[]);
30 Student *ReviseNode(Student* Head, char id[]);
31 Student *Findinformation();
32 Student *FindNode(Student *Head, char id[]);
33 Student *Sortinformaition();
34 Student *SortbyID(Student *Head);
35 Student *SortbyName(Student* Head);
36 37void login(){//主菜单 38 printf(" 学生信息管理系统 1.0\n\n");
39 printf("请选择操作:\n");
40 printf("0.退出出系统\n1.增加学生信息\n2.删除学生信息\n3.修改学生信息\n4.查询学生信息\n5.按信息排序\n6.展示信息\n");
41}
42 43 Student *Createinformation(){//创建学生信息 44 printf("请输入录如学生信息学生个数:\n");
45int n;
46 scanf("%d", &n);
47if(n <= 0) return (Student *)NULL;
48if(Whetherlistempty()) Head = Createlist(n);//如果链表为空,直接创建新链表 49else Head = AddNode(n);//反之直接在链表中加入新节点即可 50return Head;
51}
52 53bool Whetherlistempty(){//判断链表是否为空 54if(Head == NULL) returntrue;
55elsereturnfalse;
56}
57 58 Student *Createlist(int n){//创建链表 59 printf("请按照以下顺序输入学生信息\n");
60 printf("学号 姓名 年龄 性别 年级 \n");
61 Student *p1, *p2;
62for(int i = 0; i < n; i++){
63 p1 = (Student *)malloc(len);
64 scanf("%s %s %d %s %d", p1->ID, p1->name, &p1->age, p1->sex, &p1->Grade);
65if(Head == NULL) Head = p1;
66else p2->Next = p1;
67 p2 = p1;
68 }
69 p2->Next = NULL;
70 printf("创建完成!\n");
71 system("pause");
72 system("cls");
73return Head;//创建完成返回链表头 74}
75 76 Student *AddNode(int n){//增加学生信息 77 Student *newnode;
78for(int i = 0; i < n; i++){
79 newnode = (Student *)malloc(len);
80 printf("请按照以下顺序输入学生信息\n");
81 printf("学号 姓名 年龄 性别 年级 \n");
82 scanf("%s %s %d %s %d", newnode->ID, newnode->name, &newnode->age, newnode->sex, &newnode->Grade);
83 Head = Insertnode(Head, newnode);
84 }
85 printf("创建完成!\n");
86 system("pause");
87 system("cls");
88return Head;
89}
90 91 Student * Insertnode(Student *Head, Student *newnode){//在链表结尾加上一个节点 92 Student *p1, *p2, *p;
93 p1 = p2 = Head;
94 p = newnode;
95if(Head == NULL) {
96 Head = p;
97 p->Next = NULL;
98 }
99else{
100while(p1->Next != NULL){
101 p1 = p1->Next;
102 }
103 p1->Next = p;
104 p->Next = NULL;
105 }
106return Head;
107}
108109 Student *Deleteinformation(){ //删除学生信息 110 printf("请输入要删除信息学生的个数:\n");
111int n;
112 scanf("%d", &n);
113for(int i = 0; i < n; i++){
114 printf("请输入要删除信息学生的学号:");
115char id[11];
116 scanf("%s", id);
117 Head = DeleteNode(Head, id);
118 }
119 system("pause");
120 system("cls");
121return Head;
122}
123124 Student *DeleteNode(Student * Head, char id[]){//按学号删除掉链表中相应的节点 125 Student *head, *p1, *p2;
126 head = p1 = p2 = Head;
127if(head == NULL){
128 printf("系统学生信息为空!\n");
129return (Student *)NULL;
130 }
131else{
132while(strcmp(p1->ID, id) != 0 && p1->Next != NULL){
133 p2 = p1;
134 p1 = p1->Next;
135 }
136if(strcmp(p1->ID, id) == 0){
137if(p1 == head){
138 head = p1->Next;//删除操作 139 printf("删除成功!\n");
140 }
141else{
142 p2->Next = p1->Next;//删除操作 143 printf("删除成功!\n");
144 }
145 }
146else printf("没有这个学生!\n");
147 }
148return head;
149}
150151void Display(Student *Head){//打印出学生信息 152 Student *p1;
153 p1 = Head;
154 printf(" 学号 姓名 年龄 性别 年级 \n");
155while(p1 != NULL){
156 printf("%12s %10s %4d %6s %6d\n", p1->ID, p1->name, p1->age, p1->sex, p1->Grade);
157 p1 = p1->Next;
158 }
159 system("pause");
160 system("cls");
161}
162163 Student *Reviseinformation(){//查询学生信息 164 printf("请输入要修改学生信息的个数\n");
165int n;
166 scanf("%d", &n);
167for(int i = 0; i < n; i++){
168 printf("请输入要修改信息的学生的学号\n");
169char id[11];
170 scanf("%s", id);
171 Head = ReviseNode(Head, id);
172 }
173return Head;
174}
175176 Student *ReviseNode(Student* Head, char id[]){//在链表中按照学号找到相应的节点 177 Student *p1;
178 p1 = Head;
179while(p1 != NULL ){
180if( strcmp(p1->ID, id) == 0) break;
181 p1 = p1->Next;
182 }
183if(p1 == NULL){//未找到该生信息 184 printf("此系统不存在该生信息!\n");
185 system("pause");
186 system("cls");
187 }
188else{//找到后直接重新输入 189 printf("请重新按照以下顺序输入该生信息:\n");
190 printf("学号 姓名 年龄 性别 年级 \n");
191 scanf("%s %s %d %s %d", p1->ID, p1->name, &p1->age, p1->sex, &p1->Grade);
192 printf("修改成功!\n");
193 system("pause");
194 system("cls");
195 }
196return Head;
197}
198199 Student *Findinformation(){//查找学生信息并且输出 200 printf("请输入要查询学生信息的个数:\n");
201int n;
202 scanf("%d", &n);
203for(int i = 0; i < n; i++){
204 printf("请输入要查询学生的学号:\n");
205char id[11];
206 scanf("%s", id);
207 Student *p1;
208 p1 = FindNode(Head, id);
209if(i == 0){
210 printf(" 学号 姓名 年龄 性别 年级 \n");
211 }
212if(p1 == NULL){
213 printf("没有该生信息!\n");
214continue;
215 }
216 printf("%12s %10s %4d %6s %6d\n", p1->ID, p1->name, p1->age, p1->sex, p1->Grade);
217 }
218 system("pause");
219 system("cls");
220return Head;
221}
222223 Student *FindNode(Student *Head, char id[]){//在链表中按照学号寻找相应的节点 224 Student *p1;
225 p1 = Head;
226while(p1 != NULL ){
227if( strcmp(p1->ID, id) == 0) break;
228 p1 = p1->Next;
229 }
230return p1;
231}
232233 Student *Sortinformaition(){//排序的次级菜单 234while(1){
235 printf("请选择操作:\n");
236 printf("1.按学号排序\n2.按姓名排序\n0.返回主菜单\n");
237int choice;
238 scanf("%d", &choice);
239switch(choice){
240case0: system("cls"); return Head;
241case1: Head = SortbyID(Head); break;
242case2: Head = SortbyName(Head); break;
243 }
244 system("cls");
245 }
246}
247248 Student *SortbyID(Student *Head){//按照学号排序,冒泡排序法 249 Student *p1, *p2;
250char tID[11], tname[10], tsex[2];
251int tGrade, tage;
252for(p1 = Head; p1 != NULL; p1 = p1->Next){
253for(p2 = p1->Next; p2 != NULL; p2 = p2->Next){
254if(strcmp(p1->ID, p2->ID) > 0){
255 strcpy(tID, p1->ID);
256 strcpy(p1->ID, p2->ID);
257 strcpy(p2->ID, tID);
258 strcpy(tname, p1->name);
259 strcpy(p1->name, p2->name);
260 strcpy(p2->name, tname);
261 tage = p1->age;
262 p1->age = p2->age;
263 p2->age = tage;
264 strcpy(tsex, p1->sex);
265 strcpy(p1->sex, p2->sex);
266 strcpy(p2->sex, tsex);
267 tGrade = p1->Grade;
268 p1->Grade = p2->Grade;
269 p2->Grade = tGrade;
270 }
271 }
272 }
273 printf("按照学号排序完成!\n");
274 system("pause");
275 system("cls");
276return Head;
277}
278279 Student *SortbyName(Student* Head){//按照姓名排序,冒泡排序法 280 Student *p1, *p2;
281char tID[11], tname[10], tsex[2];
282int tGrade, tage;
283for(p1 = Head; p1 != NULL; p1 = p1->Next){
284for(p2 = p1->Next; p2 != NULL; p2 = p2->Next){
285if(strcmp(p1->name, p2->name) > 0){
286 strcpy(tID, p1->ID);
287 strcpy(p1->ID, p2->ID);
288 strcpy(p2->ID, tID);
289 strcpy(tname, p1->name);
290 strcpy(p1->name, p2->name);
291 strcpy(p2->name, tname);
292 tage = p1->age;
293 p1->age = p2->age;
294 p2->age = tage;
295 strcpy(tsex, p1->sex);
296 strcpy(p1->sex, p2->sex);
297 strcpy(p2->sex, tsex);
298 tGrade = p1->Grade;
299 p1->Grade = p2->Grade;
300 p2->Grade = tGrade;
301 }
302 }
303 }
304 printf("按照姓名排序完成!\n");
305 system("pause");
306 system("cls");
307return Head;
308}
309310int main(){
311while(1){
312 login();
313int funtion;
314 scanf("%d", &funtion);
315 system("cls");
316switch(funtion){
317case0: return0;
318case1:Head = Createinformation();break;
319case2:Head = Deleteinformation();break;
320case3:Head = Reviseinformation();break;
321case4:Head = Findinformation();break;
322case5:Head = Sortinformaition();break;
323case6:Display(Head);break;
324 }
325 }
326return0;
327 }
不足的地方有很多,我目前认为主要有以下两点:
1.没有任何文件操作,数据不能保存下来
2.没有创建用户名和密码,缺失安全性
原文:https://www.cnblogs.com/HyattXia/p/9427873.html
内容总结
以上是互联网集市为您收集整理的C语言编写学生信息管理系统全部内容,希望文章能够帮你解决C语言编写学生信息管理系统所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。