C语言学籍管理系统内含源代码.docx
《C语言学籍管理系统内含源代码.docx》由会员分享,可在线阅读,更多相关《C语言学籍管理系统内含源代码.docx(20页珍藏版)》请在冰点文库上搜索。
![C语言学籍管理系统内含源代码.docx](https://file1.bingdoc.com/fileroot1/2023-7/17/7777eae6-a6c3-4207-870f-723187502dcd/7777eae6-a6c3-4207-870f-723187502dcd1.gif)
C语言学籍管理系统内含源代码
学籍管理系统
一、系统简介
设计一个基于结构体数组的学生学籍管理系统,能实现对学
生学籍信息进行录入,修改,删除,查询和输出等基本操作
二、需求分析
学籍管理系统应该实现以下功能:
1、能录入学生的基本信息,包括学号,姓名,专业,年级,性别和出生日期信息,保存到结构体数组中。
2、能根据输入的学号查询学生,进行信息的修改。
3、能根据输入的学号从结构体数组中删除学生的记录。
4、实现查询功能,能根据输入的学号或年级在屏幕上显示相应的学生信息。
5、能在屏幕上以列表的方式输出所有学生的信息。
三、概要设计
1、系统功能
根据项目的开发要求,本系统划分成六个主要功能模块:
录入学生信息模块、修改学生信息模块、删除学生信息模块、查询学生信息模块、输出模块和推出模块。
系统功能机构图如下:
按
按
学
班
号
级
查
查
询
询
2、重要数据的数据结构设计
学生学籍的记录项用结构体Stumessage表示,包括6个属
性,stuno,name、spec、grade、sex、birthday分另U代表学生的学号、专业、年级、性另U和出生日期,其中birthday
类型为自定义的结构体类型Date.
Structstumessage{
Charstuno[11]:
//
学号
Charname[9]:
//
姓名
Charspec[2]:
//
专业
Chargrade:
//
年级
Charsex:
//
性别
Stuctdatebirthday:
//出生日期
};
日期类型date包括三个属性,分别代表年、月、日
Structdate
{intyear:
//年
Intday:
//H
};
3、函数设计
学籍管理系统程序采用了结构化程序设计的思想,由1个.h头文件和3个C源文件组成。
程序中除了主函数外,共设计了以下14个函数,分别包含在3个.c源文件中。
以下是这些函数原型及功能设计。
(1)voidsysinfo(void)
函数功能:
在屏幕上输入系统及信息并等待用户响应。
(2)Voidmenuofmain(structstumessagestu[]);
函数功能:
在屏幕上显示主菜单,接收用户选择并响应用户相应操作。
(3)Voidappend(structstumessagestu[]);
函数功能:
录入一条学生记录数组的末尾。
(4)voidmodify(structstumessagestu[])
函数功能:
通过输入学号查询学生相关信息,如果存在在屏幕上输出相应学生记录并通过重新输入学生信息的方法修改该学生的记录,否则输出没有找到相关记录。
;
(5)voidDelet(structstuMessagestu[])
函数功能:
通过输入学号查询学生的相应记录信息,如果存在在屏幕上输出相应学生记录,用户确认删除后用word专业资料
DelList()否则输出没有找到相关记录。
(6)VoidmenuOfsear(structstumessagestu[]);
函数功能:
在屏幕上显示查询了主菜单,接受用户选择并响应用户操作。
(7)voidlistall(structstumessagestu[]);
函数功能:
在屏幕上以列表的方式输出学生所有信息。
调用printhead()输出表头,在调用listone()函数注意输出个条记录。
(8)voidquit(void);
函数功能:
退出菜单系统,并调用exit(0)系统函数结束程序运行。
(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(0;apend();
组员3
Modify();delte();dellist(0;menuofstear();s
eranum();seargrade();numofsear();
4、小组成员分工
四、详细设计
1、系统主函数main()设计
开始
word专业资料
输出系统及版权信息
显示用户主菜单并响应
用户操作
Menuofmain()
2、主菜单模块函数menuofmain()设计
choose
接收用户选择
N
、十3、录入学生信息功能桓块亩数)Append()设计
4、修改学生信息功能模块函数modify()设计
5、删除学生信息功能模块函数delete()设计
接收要删除的学号
查询该学生记录,用i指向它
记录存在
6.查询菜单模块函数
其他
7、按学号查询功能模块函数searnum()设计
设计
8、按年级查询功能模块函数steargrade()
9、输出学生信息功能模块函数ListALL()设计;
5.调试分析
本系统在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
#include
structdate
{
intyear;
intmonth;
intday;
};
structStuMessage
{
charstuNo[11];
charname[10];
charspec[21];
intgreade;
charsex[10];
struct
datebirthday;
};
intlength=0;
structStuMessageStu[100];
intmain()
{
charc;
intmenuofmain();
intAppend(structStuMessageStu[100]);
intModify(structStuMessageStu[100]);
intDelete(structStuMessageStu[100]);
voidMenuofsear(structStuMessageStu[100]);
voidListall(structStuMessageStu[100]);
intlistone(structStuMessageStu[100],inti);
system("color5a");
voidSysInfo(void);
{
printf("\n\n\n\t\t\t\t农业大学学籍管理系统\n");
printf("\n\n\n版本信息:
\n\n");
printf("\n\tc-freevision5.0\n\n");
printf("\n\t2012--05--28\t\t");
班级:
软件1115班\n\n");
}
c=getchar();
menuofmain();
}
intmenuofmain()
{
intnum;
system("cls");
system("colorfc");
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[100])
(
system("cls");
charc,ch;
fflush(stdin);
printf("输入第%朴学生的信息。
\n",length+1);
printf("第%d个学生的信息\n",length+1);
printf("pleaseinputstuNo\n");
scanf("%s",Stu[0].stuNo);
printf("pleaseinputname\n");
scanf("%s",Stu[0].name);
printf("pleaseinputspec\n");
scanf("%s",Stu[0].spec);
printf("pleaseinputgreade\n");
scanf("%d",&Stu[0].greade);
printf("pleaseinputsex\n");
scanf("%s",Stu[0].sex);
scanf("%d%d%d",&Stu[0].birthday.year,&Stu[0].birthday.month,&Stu[
0].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("第%朴学生的信息\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.m
onth,&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;
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);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=0;
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)
(
printf("没有找到相关记录。
\n");
Menuofsear(Stu);
}
break;
case'2':
(
fflush(stdin);
printf("pleaseinputgreade\n");
scanf("%d",&a);
for(i=0;i(
if(a==Stu[i].greade)
(
j++;
listone(Stu,i);
}
}
if(j==0)
(
printf("没有找到相关记录。
\n");
Menuofsear(Stu);
}
break;
}
case'0':
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);
}