学生成绩档案管理系统的设计

项目描述:嵌入式C高级开发实训项目,独立完成学生成绩档案管理系统的设计;实现学生信息的输入、查询、修改、删除、排序、输出、保存到文件、从文件读取等功能;熟练掌握C语言的基本语法、结构体、指针、链表的使用。

项目代码:

  1 /*
  2  *时间:2013年3月27日
  3  *目的:学生信息档案管理系统
  4  */
  5 
  6 
  7 #include <stdio.h>
  8 #include <stdlib.h>
  9 #include <string.h>
 10 
 11 #define MAXSIZE 20
 12 
 13 typedef struct student_info
 14 {
 15     unsigned long int sno;
 16     char sname[MAXSIZE];
 17     char sex[MAXSIZE];
 18     int english;
 19     int math;
 20     int total;
 21     int rank;
 22 }stu_info;
 23 
 24 typedef struct student_node
 25 {
 26     struct student_info data;
 27     struct student_node *next;
 28 }stuNode,*stuList;
 29 
 30 stuList student_system_init();
 31 void input_student_info(stuList head);
 32 void output_student_info(stuList head);
 33 void ordering_student_info(stuList head);
 34 void save_student_info(stuList head);
 35 stuList read_student_info_fromdisk();
 36 void search_student_info(stuList head);
 37 void delete_student_info(stuList head);
 38 void alter_student_info(stuList head);
 39 
 40 int main(void)
 41 {
 42     int m, password,flags = 1,pass = 106016;
 43     char username[MAXSIZE];
 44     stuList head;
 45     head = student_system_init();
 46     while (1 == flags)
 47     {
 48         printf("\n\n学生成绩管理系统管理员登录界面\n");
 49         printf("请输入用户名:\n");
 50         scanf("%s",username);
 51         printf("请输入密码:\n");
 52         scanf("%d",&password);
 53 
 54         if ((0 == strcmp(username,"luciaark")) && (pass == password))
 55             flags = 0;
 56         else if ((0 != strcmp(username,"luciaark")) && (pass == password))
 57             printf("用户名输入错误,请重新输入.\n");
 58         else if ((0 == strcmp(username,"luciaark")) && (pass != password))
 59             printf("密码输入错误,请重新输入.\n");
 60         else
 61             printf("用户名和密码都输入错误,请重新输入.\n");
 62     }
 63     
 64 
 65     while(1)
 66     {
 67         printf("\n\n欢迎进入\n");
 68         printf("        学生成绩档案管理系统\n");
 69         
 70         printf("          1.输入学生成绩档案信息\n");
 71         printf("          2.输出学生成绩档案信息\n");
 72         printf("          3.学生成绩进行排名处理\n");
 73         printf("          4.保存学生信息到磁盘上\n");
 74         printf("          5.从磁盘文件读取学生信息\n");
 75         printf("          6.根据姓名查询学生信息\n");
 76         printf("          7.根据姓名删除学生信息\n");
 77         printf("          8.根据姓名修改学生信息\n");
 78         printf("          0.退出系统\n");
 79         printf("\n");
 80         
 81         printf("请选择相应的功能序号:\n");
 82         scanf("%d",&m);
 83 
 84         switch (m)
 85         {
 86         case 0:
 87             exit(0);
 88         case 1:
 89             input_student_info(head);
 90             break;
 91         case 2:
 92             output_student_info(head);
 93             break;
 94         case 3:
 95             ordering_student_info(head);
 96             break;
 97         case 4:
 98             save_student_info(head);
 99             break;
100         case 5:
101             head = read_student_info_fromdisk();
102             break;
103         case 6:
104             search_student_info(head);
105             break;
106         case 7:
107             delete_student_info(head);
108             break;
109         case 8:
110             alter_student_info(head);
111             break;
112         default:
113             printf("输入错误,请重新选择!\n");
114 
115         }
116     
117     }
118 
119     return 0;
120 }
121 
122 stuList student_system_init()
123 {
124     stuList head;
125     head = (stuList)malloc(sizeof(stuNode));
126     head->next = NULL;
127     return head;
128 }
129 
130 
131 void input_student_info(stuList head)
132 {
133     int i,m,n=1;
134     stuNode *stu,*p;
135     
136     printf("你需要输入几名学生的学生信息?\n");
137     scanf("%d",&m);
138 
139     for (i = 0; i < m; i++)
140     {
141         stu = (stuNode *)malloc(sizeof(stuNode));
142         
143         printf("开始输入学生信息.\n");
144         printf("学号为:\n");
145         scanf("%ld",&stu->data.sno);
146         printf("姓名为:\n");
147         scanf("%s",stu->data.sname);
148         printf("性别为:\n");
149         scanf("%s",stu->data.sex);
150         printf("英语成绩为:\n");
151         scanf("%d",&stu->data.english);
152         printf("数学成绩为:\n");
153         scanf("%d",&stu->data.math);
154         stu->data.total = stu->data.english + stu->data.math;
155         stu->data.rank = 0;
156         
157         if (head->next == NULL)
158         {
159             stu->next = NULL;
160             head->next = stu;        
161         }
162         else
163         {
164             stu->next = head->next;
165             head->next = stu;
166         }
167         
168         printf("你已经输入了%d个学生的学生信息\n你还需要输入%d个学生的学生信息\n",i+1,m-i-1);
169         
170     }
171     
172     printf("添加后学生信息如下:\n");
173     for (p = head->next; p->next != NULL; p = p->next)
174         n++;
175     p = head->next;
176     for (i = 0; i < n; i++)
177     {
178         printf("学号为:%ld,姓名为:%s,性别为:%s,英语成绩为:%d,数学成绩为:%d,总分为:%d,排名为:%d\n",p->data.sno,p->data.sname,p->data.sex,p->data.english,p->data.math,p->data.total,p->data.rank);
179         p=p->next;
180     }
181     
182     return;
183     
184 }
185 
186 void output_student_info(stuList head)
187 {
188     stuNode *stu;
189     stu = head->next;
190     if (NULL == stu)
191     {
192         printf("学生信息链表为空!\n");
193         return;
194     }
195     
196     while (NULL != stu)
197     {
198         printf("学号为:%ld,姓名为:%s,性别为:%s,英语成绩为:%d,数学成绩为:%d,总分为:%d,排名为:%d\n",stu->data.sno,stu->data.sname,stu->data.sex,stu->data.english,stu->data.math,stu->data.total,stu->data.rank);
199         stu = stu->next;
200     }
201     
202     return;
203 }
204 
205 void ordering_student_info(stuList head)
206 {
207     int i = 1;
208     
209     stuNode *first,*stu,*p,*q,*s;
210     if (head->next == NULL)
211     {
212         printf("学生信息链表为空,无法进行排名处理\n");
213         return;
214     }
215     first = head->next->next;
216     head->next->next = NULL;
217     while (NULL != first)
218     {
219         stu = first;
220         for (q = head->next; (q != NULL)&&(q->data.total > stu->data.total); p = q, q = q->next)
221         {
222         
223         }
224         
225         first = first->next;
226         if (q == head->next)
227         {
228             head->next = stu; 
229         }
230         else 
231         {
232             p->next = stu;
233         }
234         stu->next = q;
235     }
236 
237     s = head->next;
238     while (NULL != s)
239     {
240         s->data.rank = i;
241         s  = s->next;
242         i++;
243     }
244 
245     return;
246 }
247 
248 void save_student_info(stuList head)
249 {
250     stuNode *stu;
251     FILE *fp;
252     fp = fopen("student.txt","wb");
253     if (NULL == fp)
254     {
255         printf("文件 student.txt 不存在.\n");
256         exit(-1);
257     }
258 
259     for (stu = head->next; stu != NULL; stu = stu->next)
260     {
261         fprintf(fp,"%ld %s %s %d %d %d %d\n",stu->data.sno,stu->data.sname,stu->data.sex,stu->data.english,stu->data.math,stu->data.total,stu->data.rank);
262     }
263     fclose(fp);
264     fp = fopen("student.txt","a");
265     fprintf(fp,"0 0 0 0 0 0 0\n");
266     fclose(fp);
267     printf("保存学生信息到文件成功.\n");
268     
269     return;
270     
271 }
272 
273 stuList read_student_info_fromdisk()
274 {
275     stuList first;
276     stuNode *p,*q;
277     FILE *fp;
278     fp = fopen("student.txt","rb");
279     if (NULL == fp)
280     {
281         printf("文件 student.txt 不存在.\n");
282         exit(-1);
283     }
284 
285     first = (stuList)malloc(sizeof(stuNode));
286     first->next = NULL;
287     q = first->next;
288     while (!feof(fp))
289     {
290         p = (stuNode *)malloc(sizeof(stuNode));
291         fscanf(fp,"%ld %s %s %d %d %d %d\n",&p->data.sno,p->data.sname,p->data.sex,&p->data.english,&p->data.math,&p->data.total,&p->data.rank);
292         if (p->data.sno == 0)
293         {
294             break;
295         }
296         first->next = p;
297         p->next = q;
298         q = p;
299     }
300     if (NULL == first->next)
301     {
302         printf("文件 student.txt 为空.\n");
303     }
304     else
305         printf("文件读取成功.\n");
306 
307     fclose(fp);
308     return first;    
309 }
310 
311 void search_student_info(stuList head)
312 {
313     int i = 0;
314     char name[MAXSIZE];
315     stuNode *p;
316     printf("请输入要查找的学生姓名:\n");
317     scanf("%s",name);
318     for (p = head->next; p != NULL; p = p->next)
319     {
320         if (0 == strcmp(p->data.sname,name))
321         {
322             printf("学号为:%ld,姓名为:%s,性别为:%s,英语成绩为:%d,数学成绩为:%d,总分为:%d,排名为:%d\n",p->data.sno,p->data.sname,p->data.sex,p->data.english,p->data.math,p->data.total,p->data.rank);
323             i++;
324         }
325     }
326     if (0 == i)
327         printf("该学生信息未在学生信息管理系统中.\n");
328 
329     return;
330 }
331 
332 void delete_student_info(stuList head)
333 {
334     int x;
335     char name[MAXSIZE];
336     stuNode *p,*q;
337     if (NULL == head->next)
338     {
339         printf("学生信息数据为空,无法进行删除操作.\n");
340         return;
341     }
342     printf("请输入要删除的学生姓名:\n");
343     scanf("%s",name);
344     p = head->next;
345     if (0 == strcmp(p->data.sname,name))
346     {
347         x = p->data.sno;
348         head->next = p->next;
349         free(p);
350         printf("删除成功.\n");
351         printf("此学生学号为:%d\n",x);
352     }
353     else
354     {
355         while ((0 != strcmp(p->data.sname,name))&&(p->next != NULL))
356         {
357             q = p;
358             p = p->next;
359         }
360         if (0 == strcmp(p->data.sname,name))
361         {
362             x = p->data.sno;
363             q->next = p->next;
364             free(p);    
365             printf("删除成功.\n");
366             printf("此学生学号为:%d\n",x);
367         }
368         else
369         {
370             printf("该学生信息未在学生信息管理系统中.\n");
371             exit(-1);
372         }
373     }
374 
375     return;
376 }
377 
378 void alter_student_info(stuList head)
379 {
380     int i = 0;
381     char name[MAXSIZE];
382     stuNode *p;
383     printf("请输入要修改的学生姓名:\n");
384     scanf("%s",name);
385     for (p = head->next; p != NULL; p = p->next)
386     {
387         if (0 == strcmp(p->data.sname,name))
388         {
389             printf("该学生的原信息为:\n");
390             printf("学号为:%ld,姓名为:%s,性别为:%s,英语成绩为:%d,数学成绩为:%d,总分为:%d,排名为:%d\n",p->data.sno,p->data.sname,p->data.sex,p->data.english,p->data.math,p->data.total,p->data.rank);
391 
392             printf("请重新输入该学生的信息.\n");
393             printf("学号为:\n");
394             scanf("%ld",&p->data.sno);
395             printf("姓名为:\n");
396             scanf("%s",p->data.sname);
397             printf("性别为:\n");
398             scanf("%s",p->data.sex);
399             printf("英语成绩为:\n");
400             scanf("%d",&p->data.english);
401             printf("数学成绩为:\n");
402             scanf("%d",&p->data.math);
403             p->data.total = p->data.english + p->data.math;
404             p->data.rank = 0;
405             
406             printf("该学生信息修改成功.\n");
407             printf("该学生信息修改后为:\n");
408             printf("学号为:%ld,姓名为:%s,性别为:%s,英语成绩为:%d,数学成绩为:%d,总分为:%d,排名为:%d\n",p->data.sno,p->data.sname,p->data.sex,p->data.english,p->data.math,p->data.total,p->data.rank);
409             i++;
410             
411         }
412     }
413     if (0 == i)
414         printf("该学生信息未在学生信息管理系统中.\n");
415 
416     return;
417 }

 

转载于:https://www.cnblogs.com/luciaark/archive/2013/03/29/student.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值