学生信息管理系统讲解.docx
《学生信息管理系统讲解.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统讲解.docx(13页珍藏版)》请在冰豆网上搜索。
学生信息管理系统讲解
合肥学院
程序设计与算法语言》课程设计
报告书
题目学生信息管理系统
院系名称合肥学院数学与物理系
专业(班级)14信息与计算科学
姓名(学号)王玉(1407011011)
指导教师钱泽强
完成时间2016年12月28日
、问题描述
学生信息管理工作是每个学校必须面对的,它是一项传统且繁琐的教育基础管理工作。
本次课程设计的任务是分别采用顺序表和链表两种存储形式设计学生信息管理系统软件,基本功能要求包括增删改查等操作,并采用菜单调用各项功能。
二、基本要求
学生信息管理系统要求由两人合作完成,分别采用“顺序表”和“链表”两种形式实现。
具体要求如下:
1、编写增加数据模块,完成信息管理系统中学生信息数据的输入;
2、编写删除数据模块,完成信息管理系统中学生信息数据的删除;
3、编写数据查询模块,完成信息管理系统中学生信息数据的查询;
4、编写数据修改模块,完成信息管理系统中学生信息数据的修改;
5、编写数据排序模块,完成信息管理系统中学生信息数据的排序;
6、编写菜单模块,完成对各功能子模块的调用。
三、功能结构图和模块划分
1、功能结构图
2、存储结构
人员基本信息结构体(链表存储结构)
typedefstructnode
{structstudent
{charnum[10];/*学号*/
charname[18];/*姓名*/
charsex[3];/*性别*/
intage;/*年龄*/
}data;structnode*next;
}Node,*Link;
3、模块划分:
(1)主菜单模块voidmenu():
通过利用输出函数显示输出主菜单信息。
(2)提示错误信息模块voidWrong():
通过利用输出函数输出提示错误信息。
(3)提示没有找到模块voidNofind():
通过利用输出函数输出提示没有找到该学生
(4)输出中文、英文模块voidprintchinese()voidprintenglish(Node*p):
通过利用
输出函数输出中文提示及学生数据。
(5)定位模块Node*Locate(Linkl,charfindmess[],charnameornum[]):
定位连表中符要求合的接点,并返回该指针。
(6)增加学生信息模块voidAdd(Linkl):
通过指针的不断后移逐个接受学生信息并将学生信息付给相应变量。
(7)删除信息模块voidDel(Linkl):
根据用户选择按学号或按姓名删除,分别比对输入
数据和结构体中的数据,有匹配的则删除,没有则提示无信息可删。
(8)修改信息模块voidModify(Linkl):
通过用户输入的学号找到相应学生,然后逐项修改学生信息,否则提示无此学生。
(9)查询学生信息模块voidSeek(Linkl):
根据用户选择按学号或按姓名查询,分别按
学号或姓名逐个比较输入的数据与结构体中的数据,有匹配的则输出,没有则提示没有找到。
10)保存信息模块voidSave(Linkl):
将接受的结构体信息利用指针存入文件中。
11)排序模块voidScoretow(Linkl):
按照学生的学号大小排序,输出。
12)主函数voidmain():
通过调用各模块来实现学生信息的管理。
四、源程序
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
inthavesave=0;
typedefstructnode
{structstudent
{charnum[10];/*
学号*/
charname[18];/*
姓名*/
charsex[3];/*
性别*/
intage;/*
年龄*/
}data;structnode*next;
}Node,*Link;
{printf("\t1printf("\t3
添加学生信息\t2删除学生信息\n");查询学生信息\t4修改学生信息\n");
voidmenu()/*主菜单*/
printf("\t5
保存学生信息\t6
排序学生信息\n");
printf("\t0退出系统\n");}
voidprint_san(){printf("
\n");}
voidWrong()/*提示错误*/
{printf("\t学号\t姓名性别年龄\n");}voidprintenglish(Node*p)/*用于输出英文*/
{printf("\t%-9s%s\t%s\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.age}
该函数用于定位链表中符
Node*Locate(Linkl,charfindmess[],charnameornum[])/*合要求的结点,并返回该指针*/
{Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{r=l->next;
while(r!
=NULL)
{if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;}}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/{r=l->next;
while(r!
=NULL)
{if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;}}
return0;}
增加学生*/
voidAdd(Linkl)/*{Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;/*将指针置于最末尾*/
while
(1)
{printf("请你输入学号(以'0'返回上一级菜单:
)");
scanf("%s",num);if(strcmp(num,"0")==0)break;
while(s)
{if(strcmp(s->data.num,num)==0)
{printf("=====>提示:
学号为'%s'的学生已经存在,若要修改请你选择'4修改'!
\n",num);
print_san();
printchinese();
printenglish(s);print_san();
printf("\n");
return;}s=s->next;}p=(Node*)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:
");scanf("%s",p->data.name);
getchar();
printf("请你输入性别:
");
scanf("%s",p->data.sex);
getchar();
printf("请你输入年龄:
");scanf("%d",&p->data.age);
getchar();/*信息输入已经完成*/p->next=NULL;
r->next=p;
r=p;havesave=1;}}
voidDel(Linkl)/*删除学生*/
{intsel;
Node*p,*r;
charfindmess[20];
if(!
l->next)
{printf("\n=====>提示:
没有信息可以删除!
\n");
return;}printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
printf("\n请您选择操作:
");
scanf("%d",&sel);if(sel==1)
{printf("请您输入要删除的学号:
");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)
{r=l;
while(r->next!
=p)r=r->next;
r->next=p->next;free(p);
printf("\n=====>提示:
该学生已经成功删除!
\n");havesave=1;}else
Nofind();}
elseif(sel==2)
{printf("请你输入要删除的姓名:
");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p)
{r=l;
while(r->next!
=p)r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:
该学生已经成功删除!
\n");havesave=1;}else
Nofind();}
else
Wrong();}
voidModify(Linkl)/*修改学生信息*/
{Node*p;
charfindmess[20];if(!
l->next)
{printf("\n=====>提示:
没有信息可以修改!
\n");return;}
printf("请您输入要修改的学生学号:
");scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("请你输入新学号(原来是%s):
",p->data.num);scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):
",p->data.name);scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):
",p->data.sex);scanf("%s",p->data.sex);
printf("请你输入新的年龄(原来是%d):
",p->data.age);scanf("%d",&p->data.age);
getchar();
printf("\n=====>提示:
信息修改成功!
\n");havesave=1;}
else
Nofind();}voidSeek(Linkl)/*查询学生信息*/{intsel;
charfindmess[20];
Node*p;if(!
l->next){printf("\n=====>提示:
没有信息可以查询!
\n");
return;}
printf("\n1按学号查找\n2按姓名查找\n");printf("\n请您选择操作:
");
scanf("%d",&sel);
if(sel==1)/*学号*/
{printf("请你输入要查找的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("\t\t\t\t查找结果\n");
print_san();
printf("\n");
printchinese();
printenglish(p);
printf("\n");
print_san();
printf("按任意键返回");getch();}else
Nofind();}
elseif(sel==2)/*姓名*/
{printf("请您输入要查找的姓名:
");scanf("%s",findmess);p=Locate(l,findmess,"name");
if(p)
{printf("\t\t\t\t查找结果\n");print_san();
printf("\n");printchinese();printenglish(p);
printf("\n");print_san();
printf("按任意键返回");getch();}else
Nofind();}
else
Wrong();}
voidSave(Linkl)
{FILE*fp;
Node*p;
intflag=1,count=0;
学生管理","wb");
if(fp==NULL)
{printf("\n=====>提示:
重新打开文件时发生错误!
\n");exit
(1);}p=l->next;
while(p)
{if(fwrite(p,sizeof(Node),1,fp)==1)
{p=p->next;
count++;}else
{flag=0;
break;}}if(flag)
.)\n",count);
{printf("\n=====>提示:
文件保存成功.(有%d条记录已经保存havesave=0;}fclose(fp);}
voidScoretow(Linkl)/*按学号排序*/
{Linkll;
Node*p,*rr,*s;
ll=(Link)malloc(sizeof(Node));/*用于做新的连表*/ll->next=NULL;
if(l->next==NULL)
{printf("\n=====>提示:
没有信息可以排序!
\n");return;}p=l->next;
while(p)
{s=(Node*)malloc(sizeof(Node));/*新建接点用于保存信息*/s->data=p->data;
s->next=NULL;
rr=ll;while(rr->next!
=NULL&&rr->next->data.num>=p->data.num)rr=rr->next;
if(rr->next==NULL)rr->next=s;
else
{s->next=rr->next;
rr->next=s;}p=p->next;}free(l);
l->next=ll->next;printf("\n=====>提示:
排序已经完成!
\n");}
voidmain()
{Linkl;/*链表*/
FILE*fp;/*文件指针*/
intsel;
charc;
charchji;
intcount=0;
Node*p,*r;
printf("\t\t\t\t学生信息管理系统\n\t\t\t\t\n");l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
学生管理","rb");
if(fp==NULL)
{printf("\n=====>提示:
文件还不存在,是否创建?
(y/n)\n");scanf("%c",&chji);
if(chji=='y'||chji=='Y')
学生管理","wb");printf("\n=====>提示:
文件已经打开,正在导入记录\n");
fclose(fp);/*关闭文件*/
printf("\n=====>提示:
记录导入完毕,共导入%d条记录.\n",count);}else
exit(0);}
else{while(!
feof(fp))
{p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp))/*
{p->next=NULL;
将文件的内容放入接点中*/
r->next=p;r=p;/*count++;}
将该接点挂入连中*/
}fclose(fp);/*关闭文件*/printf("\n=====>提示:
记录导入完毕,共导入%d条记录.\n",count);}
while
(1)
{menu();
printf("请你选择操作:
");
scanf("%d",&sel);
if(sel==0)
{if(havesave==1)
{getchar();
printf("\n=====>提示:
信息已经改动,是否将改动保存到文件中(y/n)?
\n");scanf("%c",&c);
if(c=='y'||c=='Y')
Save(l);}printf("\n=====>提示:
您已经退出系统,再见!
\n");break;}
switch(sel)
{case1:
Add(l);break;/*case2:
Del(l);break;/*case3:
Seek(l);break;/*case4:
Modify(l);break;/*case5:
Save(l);break;/*
增加学生*/删除学生*/查询学生*/修改学生*/保存学生*/
case6:
Scoretow(l);break;/*按学号排序*/
default:
Wrong();getchar();break;
五、测试情况
1、进入主菜单
2、增加学生信息
3、删除学生信息(按学号删除为例)
4、查询学生信息(按学号查找为例)
5、修改学生信息
6、排序学生信息
7、退出系统
1999
,清华大学出版社,1992
1999
六、参考文献
[1]钱能编著.c++程序设计教程,清华大学出版社,
[2]谭浩强编著.c程序设计题解与上机指导(第四版)
[3]吕凤煮著.C++语言基础教程,清华大学出版社,
[4]RobertL.Kruse著.C++数据结构与程序设计,清华大学出版社,2004
[5]宁正元著.数据结构—C语言版,中国水利水电出版社,1997
小结
经过两个多星期的努力,这份课程设计论文终于做好了,看着这份满含着自己心血论文,心中百感交集。
经过一个学期的学习,我对c语言这门课程也有了一定的认识,不再是一开始上课时那样大脑一片空白。
C语言是学习计算机科学的基础,作为一名信息与计算科学专业学生,掌握C语言更是毋庸置疑。
在上课之前,就经常听同学说,C语言很难学,确实,刚开始听课时觉得老师不知所云。
不过,经过一段时间的上课时候认真听讲再加上钱老师的辅导,一
切好像也不是那么难了,这让我对C语言的学习更有信心。
计算机最重要的就是上机操作。
在课上听过老师讲解书上的知识后,再自己编写程序,最后再在计算机上运行,每次刚开始都会出现许多大大小小错误,经过分析改正后,终于能够运行了,虽然只是一些基础的程序,但毕竟是自己写出来的程序,多多少少都会有许多成就感,就这样经过一次次失败又一次次成功,慢慢地,喜欢上了这门课程。
在c语言这门课程期末考试之后,老师通知我们要做课程设计。
刚听到这个消息的时候,是有些慌张的,毕竟这次要写的程序和平时那些小程序是不一样的,一点经验也没有。
之后我并没有直接开始写,而是首先在网上找了一些关于这方面资料和一些往届学长学姐们写的课程设计论文,然后和小组的另一个同学进行反复讨论,把程序的大体轮廓和细节设计弄得清楚后在开始编写程序,之后所有事情就变得得心应手了。
在这个过程中真的学到了很多。
不仅仅是关于学习的知识,还有感受到了合作和交流的重要性,提高了自己的实际动手能力和独立思考的能力。
课程设计是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程。
在这个过程中,不仅锻炼了我们缜密的思维和坚持不解的毅力,更磨练了我们小组的团结互助的精神。
只有通过大家一起努力才能将课程设计的所有环节都顺利的完成。
另外程序设计中我们遇到问题并解决问题的过程,使得我们独自探索并解决问题的能力了有了一个提高,这有利于我们以后的学习。
同时这整一个过程,也使我们对程序编写的整个过程有了一个统筹全局的思想,因为需求分析、程序编写、程序调试、撰写报告这些过程是环环相扣的,绝对不可能独立进行。
这次课程设计设计过程中遇到了很多编程问题,但有句话说得好,“世上无难事,只怕有心人”。
最后在我和小组同学的不懈努力下,终于游逆而解。
同时,在学习c语言的过程中,在授课老师钱泽强老师的身上我也学到了很多实用的知识,在此我表示感谢!
在今后的
时间里,我一定要投入更多精力学习C语言,以课本为基础,请教老师,与同学讨论,参考资料,上机操作,我相信我一定能把C语言学好!