c语言课程设计学生信息管理系统.docx
- 文档编号:25652375
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:21
- 大小:463.48KB
c语言课程设计学生信息管理系统.docx
《c语言课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生信息管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生信息管理系统
C语言课程设计学生信息管理系统
c语言及数据结构与算法课程设计
题 目:
学生信息管理系统
专业:
姓名:
学号:
同组其他学生(学号):
2013年 月 日
一、需求分析
每年九月份都有大量新生来到学校报道,使学校管理学生工作量增大,为此我们设计一学生信息管理系统,学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
使之能提供以下功能:
(1)系统以菜单方式工作
(2)学生信息录入功能---输入
(3)学生信息浏览功能---输出
(4)查询、排序功能---算法按学号查询、按姓名查询、学生信息的删除与修改(可选项)
二、总体设计
组成框图
流程图
Y
录入浏览
N
Y
查询修改&删除
N
N
Y
Y
三、详细设计
主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(1)Record录入函数
建立一个包含学生全部信息的结构体,申请空间,其指针为p0,存入学生各项对应的数据。
(2)Insert插入函数:
按输入的数据存储在一个stu类型的指针里,若原来链表里没有元素,则将此作为第一个元素;若原来的链表里有元素,则将指向头结点指针存储的学号与头指针下一个的学号大小进行比较,小的在前大的在后,之后指向头结点处的指正后移,进行比较,直到尾结点为止。
在进行比较的while函数内,每比较一次,计算总人数的TOTAL_NUM自加。
(3)Display浏览函数:
将传给Display函数的指针P所指向的结构体的各项数据输出以便核对信息。
(4)DisplayAll浏览函数:
指针指向链表头结点,在if语句中嵌套do-while语句将学生信息按学号从大到小进行逐一输出。
(5)Query查询函数:
首先使用switch语句生成菜单,实现操作选择功能。
分三个部分按学号查询、按姓名查询和取消返回上一层。
按学号查询时调用while语句对学号检索,再调用if语句进行判断,最后输出想要查询的信息。
按姓名查询的方法跟按学号查询的一样。
(6)Del删除函数:
使用while语句进行检索,直接删除学生信息。
(7)Change修改函数:
建立devise函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行相应的信息输入。
在Change函数中使用while语句进行检索后再调用devise函数修改信息。
实现学生信息修改。
四、调试与测试
1、进行多次运行,发现电话那栏的电话一打长就会显示一样的数字,打短的数字就可以。
我们原本是使用长整型来定义电话号码,想说空间不够,后来改用字符型,用字符串记录电话号码程序运行结果正确。
2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什么,关于这个问题看了许多网上的资料,发现许多程序都有exit(0)的函数,所以去查了不少关于exit的函数内容,最后退出就用了exit(0),但是又提醒说要编写exit函数,之后发现要加入<>的头文件,程序可以正常运行。
3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将return0删除了,不过这个程序在学校的机房即使不删return0也是可以运行的,关于这点很是不解,还有待解决。
五、测试结果
1、进入系统界面,输入密码,超过三次会自动退出。
2、选1时录入学生信息,编辑完后会继续显示菜单
3、选2浏览学生信息,之后继续返回菜单界面,为节省空间菜单界面暂不截图
4、选择3查询学生信息会有按学号与按姓名查询。
下图是先按学号查询的截图。
5、按姓名查询时,如果查无此人会显示“没有该学生信息,请核对。
”之后返回上一层,按姓名查询。
显示学生信息后可以选择取消返回主菜单。
6、选择4删除学生,输入学号删除学生的信息。
之后会返回主菜单
7选择5修改学生信息,按学号输入,之后按显示输入即可。
用几组测试数据进行测试算法设计的正确性。
(附上程序运行的截图)
六、用户手册
1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序。
2密码正确后会显示主菜单,按要求输入您的需求。
七、附录
源程序清单和结果:
源程序要加注释。
结果要包括测试数据和运行结果。
/*Note:
YourchoiceisCIDE*/
#include<>
#include<>
#include<>
#include<>
#include<>
#defineNULL0
#defineLENsizeof(structstudent)
#defineFILE_DATA_PATH"c:
\"
structstudent
{longintnum;
charname[20];
intage;
charsex[4];
charbirthday[10];
charaddress[30];
chartele_num[13];
charE_mail[20];
structstudent*next;};
intTOTAL_NUM=0;
structstudent*head=NULL;
voidwelcome();
voidmainmenu();
voidrecord();
voidinsert(structstudent*stu);
voiddisplay(structstudent*stu);
voiddisplayAll();voidquery();
voidquery_by_num();voidquery_by_name();
voidreadData();
voidwriteData();
voidfreeAll();
voiddel();
voidchange();
voiddevise(structstudent*p);
intmain(){
charuserPWD[7];inti;
welcome();
for(i=0;i<3;i++){
printf("\n密码为123\n");
printf("\n请输入您的密码:
");
scanf("%s",userPWD);
if(strcmp(userPWD,"123")==0)
{//密码正确,显示主菜单
mainmenu();break;}
else
{if(i<2)
{//用户名或密码错误,提示用户重新输入
printf("密码错误,请重新输入!
");}
else{//连续3次输错用户名或密码,退出系统。
printf("您已连续3次将密码输错,系统将退出!
");
}}}
return0;}//显示欢迎信息
voidwelcome(){
printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n");
printf("||\n");
printf("|欢迎使用学生信息管理系统|\n");
printf("||\n");
printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n");}//系统主菜单
voidmainmenu(){intchoice;choice=-1;
readData();
printf("\n温馨提示:
为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{printf("\n\n\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+学生信息管理系统|\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+1----录入学生信息|\n");
printf("\t\t\t+2----浏览学生信息|\n");
printf("\t\t\t+3----查询学生信息|\n");
printf("\t\t\t+4----删除学生信息|\n");
printf("\t\t\t+5----修改学生信息|\n");
printf("\t\t\t+0----退出系统|\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice){
case0:
writeData();freeAll();exit(0);
case1:
record();break;
case2:
displayAll();break;
case3:
query();break;
case4:
del();break;
case5:
change();break;
default:
printf("\n无效选项!
");break;}}
while(choice!
=0);}//录入学生信息
voidrecord(){structstudent*p0;
p0=(structstudent*)malloc(LEN);
printf("请输入学生的学号:
");
scanf("%ld",&p0->num);
printf("请输入学生的姓名:
");
scanf("%s",p0->name);
printf("请输入学生的年龄:
");
scanf("%d",&p0->age);
printf("请输入学生的性别:
");
scanf("%s",p0->sex);
printf("请输入学生的出生年月:
");
scanf("%s",p0->birthday);
printf("请输入学生的地址:
");
scanf("%s",p0->address);
printf("请输入学生的电话:
");
scanf("%s",p0->tele_num);
printf("请输入学生的E-mail:
");
scanf("%s",p0->E_mail);
insert(p0);
printf("该学生的信息为:
\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
printf("学号\t姓名\t年龄\t性别\t出生年月\t\t地址\t电话\tE-mail\n");
display(p0);}
voidinsert(structstudent*stu)//根据学号对学生进行排序//
{
structstudent*p0,*p1,*p2;p1=head;
p0=stu;
if(head==NULL){head=p0;p0->next=NULL;}
else{while((p0->num>p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(p0->num<=p1->num){if(head==p1)head=p0;
elsep2->next=p0;
p0->next=p1;}
else{p1->next=p0;p0->next=NULL;}}
TOTAL_NUM++;}
voiddisplay(structstudent*p){
printf("%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->age,p->sex,p->birthday,p->address,p->tele_num,p->E_mail);}//浏览学生信息
voiddisplayAll(){
structstudent*p;
printf("学生总数:
%d\n",TOTAL_NUM);
p=head;
if(head!
=NULL){
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
do{display(p);p=p->next;}while(p!
=NULL);}printf("\n");}//查询学生信息
voidquery(){intchoice;
choice=-1;
do{printf("\n");
printf("+--------------------+\n");
printf("|按学号查询请按1|\n");
printf("|按姓名查询请按2|\n");
printf("|取消请按0|\n");
printf("+--------------------+\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice){case0:
return;
case1:
query_by_num();break;
case2:
query_by_name();break;
default:
printf("\n无效选项!
");break;}}
while(choice!
=0);}//按学号查询学生信息
voidquery_by_num(){
intnum;
structstudent*p1;
printf("请输入学生的学号:
");
scanf("%ld",&num);
if(head==NULL){printf("无学生记录!
\n");return;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)p1=p1->next;
if(num==p1->num){
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
display(p1);}elseprintf("没有该学生记录,请核对!
");}//按姓名查询学生信息
voidquery_by_name(){charname[20];structstudent*p1;printf("请输入学生的姓名:
");
scanf("%s",name);if(head==NULL){printf("无学生记录!
\n");return;}p1=head;
while(strcmp(name,p1->name)&&p1->next!
=NULL)p1=p1->next;
if(!
strcmp(name,p1->name)){
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
display(p1);}
elseprintf("没有该学生记录,请核对!
");}//写入文件
voidwriteData(){FILE*fp;//文件指针
structstudent*p;
fp=fopen(FILE_DATA_PATH,"w");
if(!
fp){printf("文件打开错误!
");return;}
fprintf(fp,"%d\n",TOTAL_NUM);
for(p=head;p!
=NULL;p=p->next){
fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",
p->num,p->name,p->age,p->sex,p->birthday,p->address,p->tele_num,p->E_mail);}
fclose(fp);}
voidfreeAll(){
structstudent*p1,*p2;
p1=p2=head;
while(p1){p2=p1->next;free(p1);p1=p2;}}//读取文件
voidreadData(){FILE*fp;//文件指针
structstudent*p1,*p2;
fp=fopen(FILE_DATA_PATH,"r");
if(!
fp){printf("文件打开错误!
");}
fscanf(fp,"%d\n",&TOTAL_NUM);
head=p1=p2=(structstudent*)malloc(LEN);
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",&p1->num,p1->name,&p1->age,p1->sex,p1->birthday,p1->address,&p1->tele_num,p1->E_mail);
while(!
feof(fp))
{p1=(structstudent*)malloc(LEN);
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",&p1->num,p1->name,&p1->age,p1->sex,p1->birthday,p1->address,&p1->tele_num,p1->E_mail);p2->next=p1;p2=p1;}
p2->next=NULL;fclose(fp);}//删除学生信息
voiddel(){structstudent*p1,*p2;
longintnum;
if(head==NULL)
{printf("无学生记录!
\n");return;}
printf("请输入您要删除的学生的学号:
");
scanf("%ld",&num);
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;
p1=p1->next;}
if(num==p1->num)
{if(p1==head)
head=p1->next;
elsep2->next=p1->next;
free(p1);
TOTAL_NUM--;}
elseprintf("没有该学生记录,请核对!
\n");}//修改学生信息
voidchange(){structstudent*p1,*p2;longintnum;
if(head==NULL)
{printf("无学生记录!
\n");
return;}
printf("请输入您要修改的学生的学号:
");
scanf("%ld",&num);
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)devise(p1);
elseprintf("没有该学生记录,请核对!
\n");}
voiddevise(structstudent*p)
{intchoice;
choice=-1;
do
{printf("请选择您要修改的学生的信息内容:
\n");
printf("+----------------------+\n");
printf("|姓名请按1|\n");
printf("|年龄请按2|\n");
printf("|性别请按3|\n");
printf("|出生年月请按4|\n");
printf("|地址请按5|\n");
printf("|电话请按6|\n");
printf("|E-mail请按7|\n");
printf("|取消请按0|\n");
printf("+----------------------+\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice){case0:
return;
case1:
printf("请输入新姓名:
");scanf("%s",p->name);break;
case2:
printf("请输入新年龄:
");scanf("%d",&p->age);break;
case3:
printf("请输入新性别:
");scanf("%s",p->sex);break;
case4:
printf("请输入新出生年月:
");scanf("%s",p->birthday);break;
case5:
printf("请输入新地址:
");scanf("%s",p->address);break;
case6:
printf("请输入新电话:
");scanf("%s",&p->tele_num);break;
case7:
printf("请输入新E-mail:
");scanf("%s",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 信息管理 系统