最新C语言学生信息管理系统4.docx
《最新C语言学生信息管理系统4.docx》由会员分享,可在线阅读,更多相关《最新C语言学生信息管理系统4.docx(24页珍藏版)》请在冰豆网上搜索。
最新C语言学生信息管理系统4
学生信息管理系统
本题目设计目的是训练用户的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、单链表、文件及各种语句的运用如for();switch();if….else等方面的知识。
通过本程序的训练,使用户能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。
掌握利用单链表存储结构实现对用户成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
创建一个学生信息管理系统。
假设系统中学生信息记录包括1录入学生信息:
学号,姓名,年龄,性别,出生年月,地址,电话和E-mail。
2:
浏览学生信息。
3查询学生信息:
按学号查询,按姓名查询。
4:
删除学生信息。
5:
修改学生信息。
6:
退出系统。
程序的运行效果如下图所示,选择任意菜单后,实现相应功能。
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
本号码管理系统要求采用单链表实现,它由如下六大功能模块组成:
●录入学生信息模块。
●浏览学生信息模块。
●查询学生信息模块。
●删除学生信息模块。
●修改学生信息模块。
●退出系统模块。
2.2详细设计
#include
#include
#include
#include
#defineNULL0
#defineLENsizeof(structstudent)
#defineFILE_DATA_PATH"c:
\student.txt"
structstudent
{longintnum;
charname[20];
intage;
charsex[4];
charbirthday[10];
charaddress[30];
longinttele_num;
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()
{welcome();
mainmenu();
}
/*显示欢迎信息*/
voidwelcome()
{
printf("\t\t\t+---------------------------+\n");
printf("\t\t\t||\n");
printf("\t\t\t|欢迎使用学生信息管理系统|\n");
printf("\t\t\t||\n");
printf("\t\t\t+---------------------------+\n");
}
/*系统主菜单*/
voidmainmenu()
{
intchoice;
choice=-1;
readData();
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("%ld",&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;
else
p2->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%ld\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);
}
else
printf("没有该学生记录,请核对!
");
}
/*按姓名查询学生信息*/
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);
}
else
printf("没有该学生记录,请核对!
");
}
/*写入文件*/
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%ld\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("文件打开错误!
");
return0;
}
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%ld\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%ld\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--;
}
else
printf("没有该学生记录,请核对!
\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);
else
printf("没有该学生记录,请核对!
\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("%ld",&p->tele_num);
break;
case7:
printf("请输入新E-mail:
");
scanf("%s",p->E_mail);
break;
default:
printf("\n无效选项!
");
break;}
}
while(choice!
=0);
}
3、系统实现
3.1在主菜单中选择
图3.1主菜单
3.2录入学生信息
图3.2录入学生信息菜单
3.3浏览学生信息
图3.3浏览学生信息菜单
3.4查询学生信息
图3.4查询学生信息菜单
3.5删除学生信息
图3.5删除学生信息菜单
3.6修改学生信息
图3.6修改学生信息菜单
4、系统维护
在不断的检测中常常会发现一些细微的错误,使整个程序不是很完美,,在不断的发现中,不断地改正,使开发的程序能够跟上发展的步伐,同时将不完美的地方美化。
加拿大beadworks公司就是根据年轻女性要充分展现自己个性的需求,将世界各地的珠类饰品汇集于“碧芝自制饰品店”内,由消费者自选、自组、自制,这样就能在每个消费者亲手制作、充分发挥她们的艺术想像力的基础上,创作出作品,达到展现个性的效果5、归纳总结
(四)DIY手工艺品的“个性化”5.1设计经验
通过对本课题的设计,我体会到要掌握以下几点内容。
●大程序的设计风格。
●编写主函数,并进行测试与调试。
定义函数时,应选好顾名思义的函数名和数据类型。
●
●
(一)DIY手工艺品的“多样化”链表和指针的使用要清晰明了。
●
●图1-4大学生购买手工艺制品目的文件使用方法。
文件使用完毕后应及时关闭。
(三)大学生购买消费DIY手工艺品的特点分析
5.2实训中遇到的问题及解决方法
在这次的实训中,主要遇到的问题是对链表的不熟悉和指针的指向不明的问题。
对链表的使用不熟悉,不能很正确地使用,以及指针指向不明确,导致程序无法进行。
后来经过上网查询和请教同学,终于找到了根源,可以正常运行。
同时在文件的不断调用过程中,我常常打开文件之后,就忘记了关闭文件,以致出现了好多的错误,最后在不断地运行实践下,终于可以成功运行。
2003年,上海市人均GDP按户籍人口计算就达到46700元,是1995年的2.5倍;居民家庭人均月可支配收入为14867元,是1995年的2.1倍。
收入不断增加的同时,居民的消费支出也在增加。
2003年上海居民人均消费支出为11040元,其中服务性消费支出为3369元,是1995年的3.6倍。
5.3设计中尚存的不足之处
价格便宜些□服务热情周到□店面装饰有个性□商品新颖多样□关于这次的程序,也有挺多不足的地方。
首先,我觉得程序还不够完善,有些地方的菜单名字取得不是很合理,有些函数的放置也不是很合理;其次,有些地方做的不是很详细,比如,对学生信息录入的主菜单,查询局限,功能不怎么全等;最后,就是该程序界面不够美观大方,在DOS界面上的排版不是很好,有些东西没有中放置。
除了“漂亮女生”形成的价格,优惠等条件的威胁外,还有“碧芝”的物品的新颖性,创意的独特性等,我们必须充分预见到。
5.4感想和心得体会
为期两个星期的C语言实训结束了,在这两个星期内我的感触颇深。
因为在写程序中实在