#C语言课设之学生证系统Word文档格式.docx
《#C语言课设之学生证系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《#C语言课设之学生证系统Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
主函数的设计简洁,只提供加录入、修改、删除、查询、统计和显示等函数的调用和加载功能。
其中各功能模块用菜单方式选择。
并将main(>
函数体内的界面选择部分部分语句单独抽出来做一个独立的函数,目的在于系统执行完每部分功能模块后能更方便返回到系统界面。
menu(>
函数从主函数中独立出来后,表面的主函数只是起一个程序开始的作用,其主要功能被独立出来的被调用的menu(>
函数所取代。
menu<
)函数主要完成菜单的输出和被选择的项目的输入和相应执行函数的调用。
并将已经拥有的信息从指定文件中读取到结构体st中,以便执行其他的功能性函数。
成功后需要关闭文件。
[流程图]
[程序]
//***************************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
\n\t\t********************MENU********************\n\n"
printf("
\t\t\t1.Inputinformationofstudent\n"
//输入学生信息
\t\t\t2.Inquiriesinformationofstudent\n"
//显示学生信息。
\t\t\t3.Changesinformationofstudent\n"
//修改学生信息
\t\t\t4.Deleteinformationofstudent\n"
//删除学生信息
\t\t\t5.Statisticinformationofstudent\n"
//统计学生信息
\t\t\t6.Exit"
//结束
\n\n2\t\t********************************************\n"
Choiceyournumber(1-6>
[]\b\b\b\b\b\b\b"
scanf("
%d"
&
n>
if(n<
1&
&
6>
{w=1。
getchar(>
{w=0。
free(st>
}while(w==1>
switch(n>
{case1:
input(i,st>
break。
case2:
inquiries(i,st>
case3:
change(i,st>
case4:
delete(i,st>
case5:
statistic(i,st>
case6:
exit(0>
}
}}
2、各功能模块设计
(1)输入模块设计
在向指定文件输出学生信息及录入信息前需要将输入的学生证号进行检测,该检测是在结构体中st元素的学号项值比较而得出。
如果已经存在的序号拒绝录入,如果还没有输入的学生证号就按提示继续输入学生信息信息。
输入成功后显示刚输入的信息并将信息输出到指定文件的末尾。
成功后将释放机构体指针;
关闭文件并返回到menu<
)函数继续选择并执行其他操作。
//***************************input****************************/
voidinput(intk,STU*st>
{intn,i。
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"
//输入名字
%s"
student_1.name>
\nPleaseinputyousexmale(1>
orfemale(2>
//输入性别
student_1.sex>
\nPleaseinputyouClass[]\b\b\b\b\b\b\b"
输入班号
student_1.classes>
\nPleaseinputyoudateofbirth[]\b\b\b\b\b\b\b"
输入出生日期
student_1.birth>
ab"
{fprintf(fp,"
%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,"
n>
free(st>
menu(>
}}
2、查询模块
查询的主要方式就是通过学号查询,查询时需要通过输入学号并按学生信息储存逐个核对,如果出现发现相同信息则输出该同学的其他信息,没有发现相同的信息则提示未找到并返回到menu<
该查询也是通过机构体st的元素项的比较得出。
运行结束后需要关闭文件并释放机构体指针的空间。
[流程图]
“NO”
/*****************************inquiries**************************/
voidinquiries(intk,STU*st>
{inti,j=0,n,p,w。
longa。
\n\t\t**************INQUIRIEMENU**************\n\n"
\t\t\t1.Inquiriesschoolnumber\n"
\t\t\t2.Inquiriesclasses\n"
\t\t\t3.Inquiriesdateofbirth\n"
\t\t\t4.Backtomenu\n"
\n\n\t\t******************************************\n"
Choiceyournumber(1-4>
4>
w=0。
}while(w==1>
j=0。
Pleaseinputyourinquiriesschoolnumber[]\b\b\b\b\b\b\b"
a>
for(i=0。
i<
k。
i++>
{if(st[i].num==a>
{j=1。
p++。
st[i].num,st[i].name,st[i].sex,st[i].classes,st[i].birth>
j>
Thereisnothisschoolnumber!
"
else
Success.Thereare%dstudent."
p>
inquiries(k,st>
Pleaseinputyouclassnumber[]\b\b\b\b\b\b\b"
{if(st[i].classes==a>
{i=1。
%d%s%d%d%ld"
ThereisnothisClass!
Pleaseinputyoudateofbirth[]\b\b\b\b\b\b\b"
{if(st[i].birth==a>
Thereisnothisdateofbirth!
3、修改模块
修改一个学生的信息首先要利用学生证号在已经存储的信息中找到该学生的信息并输出该学生的具体信息,再在阅读完信息之后选择所需要修改的信息。
修改成功之后需要将已经更改的信息输出到屏幕和指定文件保存。
成功之后返回到menu<
其中的信息比较也是通过输入学号和机构体中的学号项逐个比较。
/***************************change************************/
voidchange(intk,STU*st>
{inta,i,n,w,j=0,p,q=0。
student1"
wb"
Pleseinputyouchangenumber[]\b\b\b\b\b\b\b"
if(st[i].num==a>
p=i。
\n\t\t***************CHANGESMENU***************"
\n\t\t\t1.ChangeNumber"
//修改学号
\n\t\t\t2.ChangeName"
//修改名字
\n\t\t\t3.ChangeSex"
//修改性别
\n\t\t\t4.Changeclasses"
修改班号
\n\t\t\t5.ChangeDateofbirth"
修改出生日期
\n\t\t\t6.Back"
\n\t\t***********************************************\n"
\nChoiceyournumber(1-6>
elsew=0。
\nPleaseinputyournewnumber[]\b\b\b\b\b\b\b"
st[i].num>
q=1。
change(k,st>
\nPleaseinputyournewname[]\b\b\b\b\b\b\b\b\b"
st[i].name>
\nPleaseinputyourrightsexmale(M>
orfemale(f>
st[i].sex>
\nPleaseinputyournewclasses[]\b\b\b\b\b\b\b"
st[i].classes>
\nPleaseinputyourrightdateofbirth[]\b\b\b\b\b\b\b"
st[i].birth>
rewind(fp>
k>
if(p>
Thechangedinformationare:
st[q].num,st[q].name,st[q].sex,st[q].classes,st[q].birth>
fclose(fp>
Thereisnothisstudent"
4、删除模块
删除一个给定学号的学生的信息时需要在学号输入后在已经有的学生信息中逐个查找,发现该信息后直接将后一个结构体元素复制个被删除的元素,依次类推,直到倒数第二个元素被复制,这时将结构体的有效元素个数减1便完成该学生信息的删除。
在删除成功后需要将被改变的学生信息输出到指定文件。
成功之后释放结构体空间,关闭文件并返回到menu<
/******************************delete****************************/
delete(intk,STU*st>
{inti,j,b。
Pleaseinputyourdeleteschoolnumber[]\b\b\b\b\b\b\b"
Thedeletedinformationare:
for(。
k-1。
{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。
j>
j。
break。
Thereisnothisscholnumber!
5、统计模块
统计的主要项目有姓名、班级、性别和出生日期,并通过可输入菜单完成统计项目的选择和相应功能的执行。
在统计时是将输入的信息和结构体中的已有信息进行比较,如果出现同样的信息便输出该同学的信息并进行记数统计。
完成后释放结构体指针空间,返回到menu<
/********************************statistic*************************/
voidstatistic(intk,STU*st>
{intn,w,i,b,p=0。
intname[10]。
\n\t\t***************STATISTICMENU***************\n\n"
\t\t\t1.Namestatistic\n"
\t\t\t2.classesstatistic\n"
\t\t\t3.Sexstatistic\n"
\t\t\t4.Dateofbirthstatistic\n"
\t\t\t5.Back"
\n\n\t\t********************************************\n"
Choiceyournumber(1-5>
5>
\nPleaseinputyoustatisticname[]\b\b\b\b\b\b\b\b\b"
name>
{if(!
strcmp(st[i].name,name>
{p++。
}
Thereare%dstudents."
statistic(k,st>
\nPleaseinputyouclasses[]\b\b\b\b\b\b\b"
{p++。
\nPleaseinputyoustatisticsexMorF[]\b\b\b\b\b\b\b"
{if(st[i].sex==b>
statis