C语言学籍管理系统内含源代码.docx
- 文档编号:20971103
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:24
- 大小:103.42KB
C语言学籍管理系统内含源代码.docx
《C语言学籍管理系统内含源代码.docx》由会员分享,可在线阅读,更多相关《C语言学籍管理系统内含源代码.docx(24页珍藏版)》请在冰豆网上搜索。
C语言学籍管理系统内含源代码
学籍管理系统
一、系统简介
设计一个基于结构体数组的学生学籍管理系统,能实现对学生学籍信息进行录入,修改,删除,查询和输出等基本操作
二、需求分析
学籍管理系统应该实现以下功能:
1、能录入学生的基本信息,包括学号,姓名,专业,年级,性别和出生日期信息,保存到结构体数组中。
2、能根据输入的学号查询学生,进行信息的修改。
3、能根据输入的学号从结构体数组中删除学生的记录。
4、实现查询功能,能根据输入的学号或年级在屏幕上显示
相应的学生信息。
5、能在屏幕上以列表的方式输出所有学生的信息。
三、概要设计
1、系统功能
根据项目的开发要求,本系统划分成六个主要功能模块:
录入学生信息模块、修改学生信息模块、删除学生信息模块、查询学生信息模块、输出模块和推出模块。
系统功能机构图如下:
按班级查询
按学号查询
包括6个属
分别代表学
birthday
2、重要数据的数据结构设计
学生学籍的记录项用结构体Stumessage表示,性,stuno,name、spec、grade、sex、birthday生的学号、专业、年级、性别和出生日期,其中
类型为自定义的结构体类型
Date.
Structstumessage
{
Charstuno[11]:
//
学号
Charname[9]:
//
姓名
Charspec[2]:
//
专业
Chargrade:
//
年级
Charsex:
//
性别
Stuctdatebirthday:
//
出生日期
};
日期类型date包括三个属性,分别代表年、月、
Structdate
{intyear:
//
Intday:
//日
};
3、函数设计
学籍管理系统程序采用了结构化程序设计的思想,由1个.h
头文件和3个C源文件组成。
程序中除了主函数外,共设计了以下14个函数,分别包含在3个.c源文件中。
以下是这些函数原型及功能设计。
(1)voidsysinfo(void)
函数功能:
在屏幕上输入系统及版权信息并等待用户响应。
(2)Voidmenuofmain(structstumessagestu[]);
函数功能:
在屏幕上显示主菜单,接收用户选择并响应用户
相应操作。
(3)Voidappend(structstumessagestu[]);
函数功能:
录入一条学生记录数组的末尾。
(4)voidmodify(structstumessagestu[])
函数功能:
通过输入学号查询学生相关信息,如果存在在屏
幕上输出相应学生记录并通过重新输入学生信息的方法修
改该学生的记录,否则输出没有找到相关记录。
;
(5)voidDelet(structstuMessagestu[])
函数功能:
通过输入学号查询学生的相应记录信息,如果存在在屏幕上输出相应学生记录,用户确认删除后用
DelList()否则输出没有找到相关记录。
(6)VoidmenuOfsear(structstumessagestu[]);
函数功能:
在屏幕上显示查询了主菜单,接受用户选择并响应用户操作。
(7)voidlistall(structstumessagestu[]);
函数功能:
在屏幕上以列表的方式输出学生所有信息。
调用printhead()输出表头,在调用listone()函数注意输出个条记录。
(8)voidquit(void);
函数功能:
退出菜单系统,并调用exit(O)系统函数结束程
序运行。
(9)voidstearnum(structstumessagestu[]);
函数功能:
通过输入学号调用numofsear()函数查询学生
的相应的记录信息,如果存在调用printhead()函数和
listone()函数在屏幕上输出相应学生记录,否则输出没有找到相关记录。
(10)voidsteargrade(stuctstumessagestu[]);
函数功能:
通过输入年级查询学生的相关记录信息,如果存在在屏幕以列表方式输出相应学生记录,并输出统计满足条件的学生个数,否则输出没有找到相关记录。
(11)intnumofsear(structstumessagestu[].charstunumber[]);
函数功能:
根据接收到的学生学号,在相应记录数组中进行查询,如果存在相应记录,返加相应的数组下标,否则返回
-1.
(12)voidprinthead(void)
函数功能:
在屏幕上显示输出列表的表头。
(13)voidlistone(structstumessagelist);
函数功能:
在屏幕上以行的形式显示输出一个学生的相关信息。
(14)intdellist(structstumessagestu[],inti):
函数功能:
如果数组中存在下标为i的记录,删除该记录并
返回1,否则返回0.
组员1
Main():
systeminfo();menuofmain();quit();
组员2
Printhead();listone();listall(O;apend();
组员3
Modify();delte();dellist(0;menuofstear();s
eranum();seargrade();numofsear();
4、小组成员分工
四、详细设计
1、系统主函数main()设计
开始
输出系统及版权信息
Sysinfo()
显示用户主菜单并响应
用户操作
Menuofmain()
[
I
结束
2、主菜单模块函数menuofmain()设计
Length++
4、修改学生信息功能模块函数modify()设计
5、删除学生信息功能模块函数delete()设计
清屏
接收要删除的学号
*
查询该学生记录,用i指向它
记录存在
6.查询菜单模块函数
设计
设计
&按年级查询功能模块函数steargrade()
清屏
接收查询年级
输出表头
i=0,count=0
9、输出学生信息功能模块函数ListALL()设计;
输入表头
i=0
五•调试分析
本系统在VC6下编译调试通过,可顺利运行,各项功能达到设计要求。
本系统程序由一个.h头文件和三个.C源文件构成。
系统调试主要在vc6下进行,采用分模块的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并产生可执行文件student.exe。
在调试过程中,主要碰到了以下问题:
1.在清屏函数在Tc中使用的clrsc()函数,但在vc6中没有
该函数也没有相应的函数。
查资料,发现在vc中可使用
system()函数调用系统实现。
2.在使用c语言系统函数进行数据输入的时候,发现使用getchar(0和gets(0函数输入字符和字符串的时候,系统经常跳过相应的输入语句,无法输入数据。
查资料,是c系统的输入处理,缓存问题,解决方法是在进行字符和字符串输入的时候,先使用fflush(stdin)函数清除缓存,既可正常输入字符和字符串。
六、用户手册
本系统是Win32控制台程序,可在window和dos环境下运行,执行文件名称:
student.exe。
运行程序后,首先显示系统消息和版权信息,用户按任意键后进行主要功能菜单,在主功能菜单中输入相应的数字可执行相应的程序功能,包括录入学生信息、修改学生信息,删除学生信息和输入所有学生信息,输入4可进行查询子菜单,可进行按学号查询和按年级查询学生信息。
在主功能菜单案6可结束本系统的运行并自动关闭运行窗口。
七、附录
源程序文件名清单:
Alist.h//公用的常量和类型
Main.c
List.c
Edit.c
源代码如下:
#include
#include
#includevstring.h>
structdate
{
intyear;
intmonth;
intday;
};
structStuMessage
{
charstuNo[11];
charname[10];
charspec[21];
intgreade;
charsex[10];
structdatebirthday;
};
intlength=0;
structStuMessageStu[1OO];
intmain()
{
charc;
intmenuofmain();
intAppend(structStuMessageStu[100]);
intModify(structStuMessageStu[100]);
intDelete(structStuMessageStu[100]);
voidMenuofsear(structStuMessageStu[100]);
voidListall(structStuMessageStu[100]);
intlistone(structStuMessageStu[100],inti);system("color5a");
voidSyslnfo(void);{
printf("\n\n\n\t\t\t\t江西农业大学学籍管理系统\n");
printf("\n\n\n版本信息:
\n\n");
printf("\n\tc-freevision5.0\n\n");
intAppend(structStuMessageStu[100]);
intModify(structStuMessageStu[100]);
intDelete(structStuMessageStu[100]);
voidMenuofsear(structStuMessageStu[100]);
voidListall(structStuMessageStu[100]);
intlistone(structStuMessageStu[100],inti);
printf("\n\n\t\t\t江西农业大学学生档案管理系统\n\n\n");
printf("\t\t\tpleasemakeachoice\n\n\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退出系统,请选择6\n");
printf("\n\t\t\t\t\t\t\t\t\t\t\t\t\n");
printf("\n\t\t\n");
printf("请输入编号做出选择:
\n");
scanf("%d",&num);switch(num)
{
case1:
Append(Stu);break;
case2:
Modify(Stu);break;
case3:
Delete(Stu);
break;
case4:
Menuofsear(Stu);
break;
case5:
Listall(Stu);
break;
case6:
exit(0);
break;
default:
printf("非法操作\n");
break;
}
}
intAppend(structStuMessageStu[1OO])
{
system("cls");
charc,ch;
fflush(stdin);
printf("输入第%d(学生的信息。
\n",length+1);
printf("第%(1个学生的信息\n",length+1);
printf("pleaseinputstuNo\n");
scanf("%s",Stu[0].stuNo);
printf("pleaseinputname\n");
scanf("%s",Stu[O].name);
printf("pleaseinputspec\n");
scanf("%s",Stu[O].spec);
printf("pleaseinputgreade\n");
scanf("%d",&Stu[O].greade);
printf("pleaseinputsex\n");
scanf("%s",Stu[O].sex);
printf("pleaseinputbirthday\n");
scanf("%d%d%d",&Stu[O].birthday.year,&Stu[O].birthday.month,&Stu[O].birthday.day);
length++;
while
(1)
{c=getchar();
printf("输入y或Y继续输入学生记录\nn或N结束输入返回主菜单\n");
ch=getchar();
if(ch=='y'||ch=='Y')
{
system("cls");
fflush(stdin);
printf("第%4个学生的信息\n",length+1);
printf("pleaseinputstuNo\n");
scanf("%s",Stu[length].stuNo);
printf("pleaseinputname\n");scanf("%s",Stu[length].name);printf("pleaseinputspec\n");scanf("%s",Stu[length].spec);printf("pleaseinputgreade\n");scanf("%d",&Stu[length].greade);printf("pleaseinputsex\n");scanf("%s",Stu[length].sex);printf("pleaseinputbirthday'n");
scanf("%d%d%d",&Stu[length].birthday.year,&Stu[length].birthday.month,&Stu[length].birthday.day);
length++;
}
else
{
if(ch=='n'||ch=='N')
{
menuofmain();
}
}
}
}
intModify(structStuMessageStu[])
{
system("cls");
intlistone(structStuMessageStu[],inti);
charch[100],c;
inti,j=-1;
printf("输入学号进行修改.\n");
gets(ch);
for(i=0;i { if((strcmp(ch,Stu[i].stuNo))==0) {j=i; listone(Stu,i);} } if(j==-1) { printf("没有找到相关记录。 \n"); Modify(Stu); } printf("修改Y,y/N,n.\n"); fflush(stdin); c=getchar(); if(c=='Y'||c=='y') {fflush(stdin); printf("pleaseinputstuNo\n"); scanf("%s",Stu[j].stuNo); printf("pleaseinputname\n"); scanf("%s",Stu[j].name); printf("pleaseinputspec\n"); scanf("%s",Stu[j].spec); printf("pleaseinputgreade\n"); scanf("%d",&Stu[j].greade); printf("pleaseinputsex\n"); scanf("%s",Stu[j].sex); printf("pleaseinputbirthday\n"); scanf("%d%d%d",&Stu[j].birthday.year,&Stu[j].birthday.month,&Stu[j].birthday.day); } else { if(c=='N'||c=='n')menuofmain(); } printf("是否继续修改是输入y||Y否输入n||N。 ");c=getchar(); if(c=='y'||c=='Y') { Modify(Stu); } else { if(c=='n'||c=='N')menuofmain(); } } intDelete(structStuMessageStu[]) { system("cls"); intlistone(structStuMessageStu[],inti); charch[100],c; inti,j=-1; printf("输入学号进行删除.\n"); fflush(stdin); gets(ch); for(i=0;i { if((strcmp(ch,Stu[i].stuNo))==0) {j=i; listone(Stu,i);} } if(j==-1) { printf("没有找到相关记录。 \n"); Delete(Stu); } printf("删除是Y||y否N||n\n"); fflush(stdin);c=getchar(); if(c=='Y'||c=='y') { for(j;j { Stu[j]=Stu[j+1]; } length--; } else { menuofmain(); } printf("继续删除是y||Y否n||N");fflush(stdin);c=getchar(); if(c=='y'||c=='Y') { Delete(Stu); } else { if(c=='n'||c=='N')menuofmain(); } } voidMenuofsear(structStuMessageStu[]) {system("cls"); charc; charch[100]; inta,i,j=O; intlistone(structStuMessageStu[],inti);printf("\t输入0~2进行选择\n"); printf("按学号查询,请选择1\n"); printf("按年级查询,请选择2\n"); printf("返回主菜单,请选择0\n"); fflush(stdin); c=getchar();switch(c) { case'1': { fflush(stdin); printf("pleaseinputstuNo\n"); scanf("%s",&ch);for(i=0;i if((strcmp(ch,Stu[i].stuNo))==0){ j++; listone(Stu,i); } }if(j==0) { \n"); printf("没有找到相关记录。 Menuofsear(Stu); } break; } case2: { fflush(stdin); printf("pleaseinputgreade\n");scanf("%d",&a); for(i=0;i { if(a==Stu[i].greade) { j++; listone(Stu,i); } } if(j==0) { \n"); printf(”没有找到相关记录。 Menuofsear(Stu); } break; } case'O': { menuofmain();break; } default: { printf("非法操作"); } } printf("继续查询y||Y返回主菜单n||N\n"); fflush(stdin); c=getchar(); if(C=='y'||c=='Y') { Menuofsear(Stu); } else { main(); } } voidListall(structStuMessageStu[]) { system("cls"); inti; charc; intlistone(structStuMessageStu[],inti);for(i=0;i { fflush(stdin); listone(Stu,i); } c=getchar(); menuofmain(); } intlistone(structStuMessageStu[100],inti) { fflush(stdin); printf("stuNo: %s,name: %s,spec: %s,greade: %d,sex: %s,birthday: %d%d %d\n",Stu[i].stuNo,Stu[i].name,Stu[i].spec,Stu[i].greade,Stu[i].sex,Stu[i].birthday.year,Stu[i].birthday.month,Stu[i].birthday.day); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学籍 管理 系统 内含 源代码