学籍管理系统课程答辩Word格式.docx
《学籍管理系统课程答辩Word格式.docx》由会员分享,可在线阅读,更多相关《学籍管理系统课程答辩Word格式.docx(32页珍藏版)》请在冰点文库上搜索。
![学籍管理系统课程答辩Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/1df04521-09e9-4b95-8eb3-8efe9e3a755f/1df04521-09e9-4b95-8eb3-8efe9e3a755f1.gif)
《C语言课程设计》
一、课程设计目的
1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2、通过课程设计,学会设计数据结构。
其中包括对结构数组、数据文件等知识的运用。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容及任务要求:
1设计内容
设计一个基于结构体数组的学生学籍管理系统,能实现对学生学籍信息进行录入,修改,删除,查询和输出等基本操作。
2任务要求
(学籍管理系统应该实现以下功能):
1、能录入学生的基本信息,包括学号,姓名,专业,年级,性别和出生日期信息,保存到结构体数组中。
2、能根据输入的学号查询学生,进行信息的修改。
3、能根据输入的学号从结构体数组中删除学生的记录。
4、实现查询功能,能根据输入的学号或年级在屏幕上显示相应的学生信息。
5、能在屏幕上以列表的方式输出所有学生的信息。
三.概要设计
1.系统功能
根据项目的开发要求,本系统划分成六个主要功能模块:
录入学生信息模块、修改学生信息模块、删除学生信息模块、查询学生信息模块、输出模块和推出模块。
系统功能机构图如下:
2、重要数据的数据结构设计
学生学籍的记录项用结构体Stumessage表示,包括6个属性,stuno,name、spec、grade、sex、birthday分别代表学生的学号、专业、年级、性别和出生日期,其中birthday类型为自定义的结构体类型Date.
Structstumessage
{
Charstuno[11]:
//学号
Charname[9]:
//姓名
Charspec[2]:
//专业
Chargrade:
//年级
Charsex:
//性别
Stuctdatebirthday:
//出生日期
};
日期类型date包括三个属性,分别代表年、月、日。
Structdate
{intyear:
//年
Intmonth:
//月
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(0)系统函数结束程序运行。
(9)voidsteargrade(stuctstumessagestu[]);
通过输入年级查询学生的相关记录信息,如果存在在屏幕以列表方式输出相应学生记录,并输出统计满足条件的学生个数,否则输出没有找到相关记录。
(11)intnumofsear(structstumessagestu[].charstunumber[]);
根据接收到的学生学号,在相应记录数组中进行查询,如果存在相应记录,返加相应的数组下标,否则返回-1.
(12)voidprinthead(void)
在屏幕上显示输出列表的表头。
(13)voidlistone(structstumessagelist);
在屏幕上以行的形式显示输出一个学生的相关信息。
四、详细设计
1、系统主函数main()设计
2、主菜单模块函数menuofmain()设计
1234560
Y
N
3、录入学生信息功能模块函数Append()设计
Y或y
N或n
4、修改学生信息功能模块函数modify()设计
5、删除学生信息功能模块函数delete()设计
YN
N
Y
6.查询菜单模块函数menuofsear()设计
120其他
7、按学号查询功能模块函数searnum()设计
YN
8、
按年级查询功能模块函数steargrade()设计
9、输出学生信息功能模块函数ListALL()设计;
五、调试分析
本系统在VC6.0下编译调试通过,可顺利运行,各项功能达到设计要求。
本系统程序由一个.h头文件和三个.C源文件构成。
系统调试主要在vc6.0下进行,采用分模块的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并产生可执行文件student.exe。
六、调试问题
(1)调试过程中的主要问题
由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。
对于本程序的调试运行,总体上情况良好。
但是,其中也出现了一些小问题:
1)主界面不工整,有乱行现象,主要问题出在运用“/t”和“/n”上
2)在使用c语言系统函数进行数据输入的时候,发现使用getchar函数输入字符和字符串的时候,系统经常跳过相应a的输入语句,无法输入数据。
查资料,是c系统的输入处理,缓存问题,解决方法是在进行字符和字符串输入的时候,先使用fflush(stdin)函数清除缓存,既可正常输入字符和字符串。
3)在这次程序调试中我还发现了return;
与break;
的不同作用,其中break是只能用来结束它本身所在的本层循环,而return则是结束调用函数,让程序返回到主函数;
用system(“cls”)来清理屏幕显示等。
(2)调试过程中的问题的解决办法:
小组内成员进行讨论,向老师、学长请教,上网查资料,去图书馆查找参考文献,《C语言程序设计》第二版。
七、课程设计总结:
八、附录
源代码如下:
#include<
stdlib.h>
string.h>
stdio.h>
//函数的声明
voidmenuofmain(void);
//对菜单的操作,不需要返回值,
voidSysInfo(void);
voidAppend(structStuMessageStu[100]);
voidModify(structStuMessageStu[100]);
voidDelete(structStuMessageStu[100]);
voidMenuofsear(structStuMessageStu[100]);
voidListall(structStuMessageStu[100]);
voidlistone(structStuMessageStu[100],inti);
structdate
intyear;
intmonth;
intday;
};
structStuMessage
charstuNo[11];
charname[10];
charspec[21];
intgreade;
charsex[10];
structdatebirthday;
intlength=0;
structStuMessageStu[100];
intmain()
charc;
SysInfo();
system("
color5a"
);
c=getchar();
menuofmain();
return0;
}
voidSysInfo(void)
printf("
\n\n\n\t\t\t天津工业大学学籍管理系统\n"
\n\n\t\t\t班级:
信计1302班\n\n"
\t\t\t姓名:
帅继广孙赫遥龚慧慧袁博\n\n"
\t\t\t指导教师:
宁安良\n\n"
\n\t\t\t\t\t2014--06--19\t\t"
\n\n\t\t\tenter进入学籍管理系统.........\n"
voidmenuofmain()
{
intnum;
cls"
colorfc"
\n\n\t\t\t天津工业大学学生档案管理系统\n\n\n"
\t\t\tpleasemakeachoice\n\n\n"
\t\t\t录入学生信息,请选择1\n"
\t\t\t修改学生信息,请选择2\n"
\t\t\t删除学生信息,请选择3\n"
\t\t\t查询学生信息,请选择4\n"
\t\t\t输出学生信息,请选择5\n"
\t\t\t退出系统,请选择6\n"
\n\t\t\t\t\t\t\t\t\t\t\t\t\n"
\n\t\t\n"
请输入编号做出选择:
\n"
scanf("
%d"
&
num);
switch(num)
{
case1:
Append(Stu);
break;
case2:
Modify(Stu);
case3:
Delete(Stu);
case4:
Menuofsear(Stu);
case5:
Listall(Stu);
case6:
exit(0);
default:
printf("
非法操作\n"
}
}
voidAppend(structStuMessageStu[100])
charc,ch;
fflush(stdin);
输入第%d个学生的信息。
length+1);
第%d个学生的信息\n"
pleaseinputstuNo\n"
%s"
Stu[0].stuNo);
pleaseinputname\n"
Stu[0].name);
pleaseinputspec\n"
Stu[0].spec);
pleaseinputgreade\n"
&
Stu[0].greade);
pleaseinputsex\n"
Stu[0].sex);
pleaseinputbirthday\n"
%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("
fflush(stdin);
printf("
scanf("
Stu[length].stuNo);
Stu[length].name);
Stu[length].spec);
Stu[length].greade);
Stu[length].sex);
Stu[length].birthday.year,&
Stu[length].birthday.month,&
Stu[length].birthday.day);
length++;
}
else
if(ch=='
n'
N'
{
menuofmain();
}
voidModify(structStuMessageStu[])
charch[100],c;
inti,j=-1;
输入学号进行修改.\n"
gets(ch);
for(i=0;
i<
length;
i++)
if((strcmp(ch,Stu[i].stuNo))==0)
j=i;
listone(Stu,i);
if(j==-1)
没有找到相关记录。
Modify(Stu);
修改Y,y/N,n.\n"
c=getchar();
if(c=='
||c=='
fflush(stdin);
scanf("
Stu[j].stuNo);
Stu[j].name);
Stu[j].spec);
Stu[j].greade);
Stu[j].sex);
Stu[j].birthday.year,&
Stu[j].birthday.month,&
Stu[j].birthday.day);
else
if(c=='
menuofmain();
是否继续修改是输入y||Y否输入n||N。
"
voidDelete(structStuMessageStu[])
输入学号进行删除.\n"
Delete(Stu);
删除是Y||y否N||n\n"
for(j;
j<
j++)
Stu[j]=Stu[j+1];
length--;
menuofmain();
继续删除是y||Y否n||N"
voidMenuofsear(structStuMessageStu[])
charch[100];
inta,i,j=0;
\t输入0~2进行选择\n"
按学号查询,请选择1\n"
按年级查询,请选择2\n"
返回主菜单,请选择0\n"
switch(c)
case'
1'
:
ch);
for(i=0;
if((strcmp(ch,Stu[i].stuNo))==0)
{
j++;
listone(Stu,i);
}
if(j==0)
printf("
Menuofsear(Stu);
break;
2'
a);
if(a==Stu[i].greade)
0'
}
非法操作"
继续查询y||Y返回主菜单n||N\n"
Menuofsear(Stu);
main();
voidListall(structStuMessageStu[])
inti;
listone(Stu,i);
voidlistone(structStuMessageStu[100],inti)
stuNo:
%s,name:
%s,spec:
%s,greade:
%d,sex:
%s,birthday:
%d%d%d\n"