C语言课设之学生证系统.docx
- 文档编号:28951420
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:34
- 大小:155.66KB
C语言课设之学生证系统.docx
《C语言课设之学生证系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之学生证系统.docx(34页珍藏版)》请在冰豆网上搜索。
C语言课设之学生证系统
学生证的管理程序
——C语言课程设计报告
一、题目要求
该程序应该具有下列功能:
1、录入某位学生的学生证信息。
学生证应该包照自含的信息请参己的学生证;
2、给定学号,显示某位学生的学生信息;
3、给定某个班级的班号,显示该班所有学生的学生证信息
4、给定某位学生的学号,修改该学生的学生信息;
5、给定某位学生的学号,删除该学生的学生信息;
6、提供一些统计各类信息的功能。
[输入要求]
应用程序后,在屏幕上显示一个菜单。
用户可以根据要求选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
[输出要求]
1、应用程序运行后,要在屏幕上显示一个菜单;
2、要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
[提示]
设计一个结构体类型和一维数组类型,用来保存学生证内容;
二、需求分析
根据题目要求,因为学生信息是一个有不同类型的变量组成,因此,应提供结构体操作,在程序中需要浏览学生信息,应提供显示、查找、修改、删除、统计等操作。
另外还应该提供键盘式的选择菜单实现功能选择。
三、总体设计
学生证的管理程序主要包含学生信息的录入、修改、删除、查询、统计等模块。
为了各模块的独立性,将显示模块分别镶嵌在录入、修改、删除、查询、统计等模块中。
统计
模块
四、详细分析
1、主函数
[分析]
主函数的设计简洁,只提供加录入、修改、删除、查询、统计和显示等函数的调用和加载功能。
其中各功能模块用菜单方式选择。
并将main(>函数体内的界面选择部分部分语句单独抽出来做一个独立的函数,目的在于系统执行完每部分功能模块后能更方便返回到系统界面。
menu(>函数从主函数中独立出来后,表面的主函数只是起一个程序开始的作用,其主要功能被独立出来的被调用的menu(>函数所取代。
menu<)函数主要完成菜单的输出和被选择的项目的输入和相应执行函数的调用。
并将已经拥有的信息从指定文件中读取到结构体st中,以便执行其他的功能性函数。
成功后需要关闭文件。
[流程图]
Y
[程序]
//***************************menu*************************/
menu(>
{intn,w,i,j。
STU*st。
FILE*fp。
fp=fopen("student1.txt","wb+">。
if(!
fp>
{printf("Documenterror!
">。
exit(0>。
}
else
{fread(&i,2,1,fp>。
fclose(fp>。
j=i+1。
st=(STU*>malloc(j*sizeof(STU>>。
do
{printf("\n\t\t********************MENU********************\n\n">。
printf("\t\t\t1.Inputinformationofstudent\n">。
//输入学生信息
printf("\t\t\t2.Inquiriesinformationofstudent\n">//显示学生信息。
printf("\t\t\t3.Changesinformationofstudent\n">。
//修改学生信息
printf("\t\t\t4.Deleteinformationofstudent\n">。
//删除学生信息
printf("\t\t\t5.Statisticinformationofstudent\n">。
//统计学生信息
printf("\t\t\t6.Exit">。
//结束
printf("\n\n2\t\t********************************************\n">。
printf("Choiceyournumber(1-6>[]\b\b\b\b\b\b\b">。
scanf("%d",&n>。
if(n<1&&n>6>
{w=1。
getchar(>。
}
else
{w=0。
free(st>。
}
}while(w==1>。
switch(n>
{case1:
input(i,st>。
break。
case2:
inquiries(i,st>。
break。
case3:
change(i,st>。
break。
case4:
delete(i,st>。
break。
case5:
statistic(i,st>。
break。
case6:
exit(0>。
break。
}
}}
2、各功能模块设计
(1)输入模块设计
[分析]
在向指定文件输出学生信息及录入信息前需要将输入的学生证号进行检测,该检测是在结构体中st元素的学号项值比较而得出。
如果已经存在的序号拒绝录入,如果还没有输入的学生证号就按提示继续输入学生信息信息。
输入成功后显示刚输入的信息并将信息输出到指定文件的末尾。
成功后将释放机构体指针;关闭文件并返回到menu<)函数继续选择并执行其他操作。
[流程图]
输出刚输入的信息
[程序]
//***************************input****************************/
voidinput(intk,STU*st>
{intn,i。
FILE*fp。
longb。
STUstudent_1。
{printf("Pleaseinputyournumber[]\b\b\b\b\b\b\b">。
//输入学号
scanf("%ld",&b>;
printf("\nPleaseinputyourname[]\b\b\b\b\b\b\b\b\b">。
//输入名字
scanf("%s",student_1.name>。
printf("\nPleaseinputyousexmale(1>orfemale(2>[]\b\b\b\b\b\b\b">。
//输入性别
scanf("%d",&student_1.sex>。
printf("\nPleaseinputyouClass[]\b\b\b\b\b\b\b">。
输入班号
scanf("%ld",&student_1.classes>。
printf("\nPleaseinputyoudateofbirth[]\b\b\b\b\b\b\b">。
输入出生日期
scanf("%ld",&student_1.birth>。
fp=fopen("student1.txt","ab">。
if(!
fp>
{printf("Documenterror!
">。
exit(0>。
}
else
{fprintf(fp,"%ld%s%d%ld%ld",b,student_1.name,student_1.sex,student_1.classes,student_1.birth>。
printf("%ld%s%d%ld%ld",b,student_1.name,student_1.sex,student_1.classes,student_1.birth>。
n=k+1。
rewind(fp>。
fprintf(fp,"%d",n>。
fclose(fp>。
free(st>。
menu(>。
}
}}
2、查询模块
[分析]
查询的主要方式就是通过学号查询,查询时需要通过输入学号并按学生信息储存逐个核对,如果出现发现相同信息则输出该同学的其他信息,没有发现相同的信息则提示未找到并返回到menu<)函数继续选择并执行其他操作。
该查询也是通过机构体st的元素项的比较得出。
运行结束后需要关闭文件并释放机构体指针的空间。
一系列功能选项
[流程图]
“NO”
输入n,判断n的值是否是1—4,
查找出生日期
查找班级
查找学号
返回到menu
返回到menu
返回到menu
[程序]
/*****************************inquiries**************************/
voidinquiries(intk,STU*st>
{inti,j=0,n,p,w。
longa。
do
{printf("\n\t\t**************INQUIRIEMENU**************\n\n">。
printf("\t\t\t1.Inquiriesschoolnumber\n">。
printf("\t\t\t2.Inquiriesclasses\n">。
printf("\t\t\t3.Inquiriesdateofbirth\n">。
printf("\t\t\t4.Backtomenu\n">。
printf("\n\n\t\t******************************************\n">。
printf("Choiceyournumber(1-4>[]\b\b\b\b\b\b\b">。
scanf("%d",&n>。
if(n<1&&n>4>
{w=1。
getchar(>。
}
else
w=0。
}while(w==1>。
switch(n>
{case1:
j=0。
printf("Pleaseinputyourinquiriesschoolnumber[]\b\b\b\b\b\b\b">。
scanf("%ld",&a>。
for(i=0。
i i++> {if(st[i].num==a> {j=1。 p++。 printf("%ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 } } if(! j> {printf("Thereisnothisschoolnumber! ">。 } else {printf("Success.Thereare%dstudent.",p>。 } inquiries(k,st>。 break。 case2: j=0。 printf("Pleaseinputyouclassnumber[]\b\b\b\b\b\b\b">。 scanf("%ld",&a>。 for(i=0。 i i++> {if(st[i].classes==a> {i=1。 p++。 printf("%d%s%d%d%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 } } if(! j> {printf("ThereisnothisClass! ">。 } else {printf("Success.Thereare%dstudent.",p>。 } inquiries(k,st>。 break。 case3: j=0。 printf("Pleaseinputyoudateofbirth[]\b\b\b\b\b\b\b">。 scanf("%ld",&a>。 for(i=0。 i i++> {if(st[i].birth==a> {i=1。 p++。 printf("%d%s%d%d%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 } } if(! j> {printf("Thereisnothisdateofbirth! ">。 } else {printf("Success.Thereare%dstudent.",p>。 } inquiries(k,st>。 break。 case4: free(st>。 menu(>。 break。 } } 3、修改模块 [分析] 修改一个学生的信息首先要利用学生证号在已经存储的信息中找到该学生的信息并输出该学生的具体信息,再在阅读完信息之后选择所需要修改的信息。 修改成功之后需要将已经更改的信息输出到屏幕和指定文件保存。 成功之后返回到menu<)函数继续选择并执行其他操作。 其中的信息比较也是通过输入学号和机构体中的学号项逐个比较。 [流程图] 重输入 [程序] /***************************change************************/ voidchange(intk,STU*st> {inta,i,n,w,j=0,p,q=0。 FILE*fp。 fp=fopen("student1","wb">。 if(! fp> {printf("Documenterror! ">。 exit(0>。 } printf("Pleseinputyouchangenumber[]\b\b\b\b\b\b\b">。 scanf("%ld",&a>。 for(i=0。 i i++> if(st[i].num==a> {j=1。 p=i。 do {printf("\n\t\t***************CHANGESMENU***************">。 printf("\n\t\t\t1.ChangeNumber">。 //修改学号 printf("\n\t\t\t2.ChangeName">。 //修改名字 printf("\n\t\t\t3.ChangeSex">。 //修改性别 printf("\n\t\t\t4.Changeclasses">。 修改班号 printf("\n\t\t\t5.ChangeDateofbirth">。 修改出生日期 printf("\n\t\t\t6.Back">。 printf("\n\t\t***********************************************\n">。 printf("\nChoiceyournumber(1-6>[]\b\b\b\b\b\b\b">。 scanf("%d",&n>。 if(n<1&&n>6> {w=1。 getchar(>。 } elsew=0。 }while(w==1>。 switch(n> {case1: printf("\nPleaseinputyournewnumber[]\b\b\b\b\b\b\b">。 scanf("%ld",&st[i].num>。 q=1。 change(k,st>。 break。 case2: printf("\nPleaseinputyournewname[]\b\b\b\b\b\b\b\b\b">。 scanf("%s",st[i].name>。 q=1。 change(k,st>。 break。 case3: printf("\nPleaseinputyourrightsexmale(M>orfemale(f>>[]\b\b\b\b\b\b\b">。 scanf("%d",&st[i].sex>。 q=1。 change(k,st>。 break。 case4: printf("\nPleaseinputyournewclasses[]\b\b\b\b\b\b\b">。 scanf("%ld",&st[i].classes>。 q=1。 change(k,st>。 break。 case5: printf("\nPleaseinputyourrightdateofbirth[]\b\b\b\b\b\b\b">。 scanf("%ld",st[i].birth>。 q=1。 change(k,st>。 break。 case6: rewind(fp>。 } fprintf(fp,"%d",k>。 for(i=0。 i i++> fprintf(fp,"%ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 if(p> printf("Thechangedinformationare: %ld%s%d%ld%ld",st[q].num,st[q].name,st[q].sex,st[q].classes,st[q].birth>。 free(st>。 fclose(fp>。 menu(>。 } if(! j> {printf("Thereisnothisstudent">。 free(st>。 menu(>。 } } 4、删除模块 [分析] 删除一个给定学号的学生的信息时需要在学号输入后在已经有的学生信息中逐个查找,发现该信息后直接将后一个结构体元素复制个被删除的元素,依次类推,直到倒数第二个元素被复制,这时将结构体的有效元素个数减1便完成该学生信息的删除。 在删除成功后需要将被改变的学生信息输出到指定文件。 成功之后释放结构体空间,关闭文件并返回到menu<)函数继续选择并执行其他操作。 [流程图] N [程序] /******************************delete****************************/ delete(intk,STU*st> {inti,j,b。 longa。 FILE*fp。 printf("Pleaseinputyourdeleteschoolnumber[]\b\b\b\b\b\b\b">。 scanf("%ld",&a>。 for(i=0。 i i++> if(st[i].num==a> {printf("Thedeletedinformationare: %ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 for(。 i i++> {st[i].num=st[i+1].num。 strcpy(st[i].name,st[i+1].name>。 st[i].sex=st[i+1].sex。 st[i].classes=st[i+1].classes。 st[i].birth=st[i+1].birth。 } j=k-1。 fp=fopen("student1","wb">。 if(! fp> {printf("Documenterror! ">。 exit(0>。 } rewind(fp>。 fprintf(fp,"%d",j>。 for(i=0。 i i++> fprintf(fp,"%ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 free(st>。 fclose(fp>。 menu(>。 break。 } else {printf("Thereisnothisscholnumber! ">。 free(st>。 fclose(fp>。 menu(>。 } } 5、统计模块 [分析] 统计的主要项目有姓名、班级、性别和出生日期,并通过可输入菜单完成统计项目的选择和相应功能的执行。 在统计时是将输入的信息和结构体中的已有信息进行比较,如果出现同样的信息便输出该同学的信息并进行记数统计。 完成后释放结构体指针空间,返回到menu<)函数继续选择并执行其他操作。 [流程图] 返回主函数 [程序] /********************************statistic*************************/ voidstatistic(intk,STU*st> {intn,w,i,b,p=0。 longa。 intname[10]。 do {printf("\n\t\t***************STATISTICMENU***************\n\n">。 printf("\t\t\t1.Namestatistic\n">。 printf("\t\t\t2.classesstatistic\n">。 printf("\t\t\t3.Sexstatistic\n">。 printf("\t\t\t4.Dateofbirthstatistic\n">。 printf("\t\t\t5.Back">。 printf("\n\n\t\t********************************************\n">。 printf("Choiceyournumber(1-5>[]\b\b\b\b\b\b\b">。 scanf("%d",&n>。 if(n<1&&n>5> {w=1。 getchar(>。 } else w=0。 }while(w==1>。 switch(n> {case1: printf("\nPleaseinputyoustatisticname[]\b\b\b\b\b\b\b\b\b">。 scanf("%s",name>。 for(i=0。 i i++> {if(! strcmp(st[i].name,name>> {p++。 printf("%ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 } } if(p> printf("Thereare%dstudents.",p>。 statistic(k,st>。 case2: printf("\nPleaseinputyouclasses[]\b\b\b\b\b\b\b">。 scanf("%ld",&a>。 for(i=0。 i i++> {if(st[i].classes==a> {p++。 printf("%ld%s%d%ld%ld",st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>。 } } if(p> printf("Thereare%dstudents.",p>。 statistic(k,st>。 case3: printf("\nPleaseinputyoustatisticsexMorF[]\b\b\b\b\b\b\b">。 scanf("%d",&b>。 for(i=0。 i i++> {if(st[i].sex==b> {p++。 printf("%ld%s%d%ld%ld",st[i].num,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生证 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)