资源描述
C语言课程设计
题目名称: 学生信息管理系统
姓 名 XXX
学 号 XXXXXXXX
专 业 网络工程
班 级 一班
指导老师 XXX
编写日期 /6/6
目
录
1、序言 3
2、需求分析 3
2.1.具体目标 3
2.1.1 3
2.1.2. 3
2.1.3. 3
2.1.4. 3
3、总体设计 4
3.1.算法分析 4
3.2.程序框图 5
4、具体设计 5
4.1.函数模块 5
4.1.1.主界面函数 5
4.1.2.输入函数 6
4.1.3.查询函数 7
4.1.4.修改信息函数 9
4.1.5.增加信息函数 11
4.1.6删除信息函数. 13
4.1.7.输出信息函数 14
4.1.8保留信息函数 14
4、组员名单 15
5、结论和心得 15
6、致谢 21
1、序言
伴随学校规模不停过大,学生数量急剧增加,相关学生多种信息量也成倍增加。面对庞大信息量需要有学生信息管理系统来提升学生管理工作效率。经过这么系统能够做到信息规范化管理、科学性统计和快速查询、修改、增加、删除等,从而降低管理方面工作量。
2、需求分析
本系统关键需要处理任务是实现学生信息关系系统化、规范化和自动化,其关键目标是计算学生多种信息进行日常管理,如查询、修改、增加删除学生信息等。在实现程序功效同时应该做到界面简单易懂,轻易操作,方便使用要求。而且程序需要有一定纠错能力。
2.1.具体目标
本系统关键应用于学生学籍管理、信息查询等部分,含有不一样操作功效。具体功效以下:
2.1.1 相关学生信息录入,学生信息包含输入学生学号,姓名,年纪,性别,出生年月,地址,电话,E-mail等(学生信息用文件保留)。
2.1.2. 学生信息浏览功效。
2.1.3. 学生信息查询功效,其中实现按学号和姓名二种方法查询。
2.1.4. 学生信息修改功效,包含增加、删除等。
3、总体设计
3.1.算法分析
首先,考虑信息录入,一个学生包含这么多属性,应该考虑定义一个结构体。其次,我们应该考虑数据存放形式,在这里我们用一个数组。从文件中录入我们首先要定义一个文件指针,打开该文件后经过一个循环来读文件,将全部信息读出来后关闭文件。
对于菜单实现,首先用printf语句把程序功效列出来,然后等候用户输入而实施不一样函数,实施完了一个功效后又回到菜单。
信息浏览,我们只需要经过一个循环将结构体中全部元素输出就行了。
信息查询,我们选择用switch结构来处理用学号和姓名二种方法来查询要求。等输入学号或姓名时候,经过字符串比较函数,假如存在,那么输出学生信息,不然提醒错误并要求重新输入。
信息修改,输入要修改信息学号。首先用字符串比较函数判定改学生信息是否存在,假如存在,同过switch语句来依次修改学生各项信息。修改信息我们需要用字符串复制函数。
增加新学生信息,输入要增加学号。首先用字符串比较函数判定,假如输入学号已经存在,则提醒重新输入,不然依次输入各项信息。
删除学生信息,经过比较找到要删除学号,用后一个学生信息直接赋值,后面依次赋值给前一个学生信息。
3.2.程序框图
学生信息管理
录入学生信息
查询学生信息
修改学生信息
增加学生信息
删除学生信息
显示目前信息
保留学生信息
退出系统
按学号
按姓名
4、具体设计
4.1.函数模块
4.1.1.主界面函数
void menu()
{ int num;
printf(" 简易学生通讯录系统\n\n");
printf(" -----------系统功效菜单----------\n");
printf(" *****************************\n");
printf(" * 1.读入学生信息 *\n");
printf(" * 2.查询学生信息 *\n");
printf(" * 3.修改学生信息 *\n");
printf(" * 4.增加学生信息 *\n");
printf(" * 5.按学号删除信息 *\n");
printf(" * 6.显示目前信息 *\n");
printf(" * 7.保留目前学生信息 *\n");
printf(" * 8.退出系统 *\n");
printf(" *****************************\n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num)
{
case 1:input();break;
case 2:inquir();break;
case 3:modify();break;
case 4:increase();break;
case 5:del();break;
case 6:output();break;
case 7:save();break;
case 8:k=0;break;
default:printf("请在1-8之间选择\n");
}
}
说明:此函数功效是输出主界面功效菜单,已供选择对应模块进行操作。
其中定义一个变量num,经过输入num值来进入对应功效,switch提供了不一样选择入口。在结束对应功效操作后又返回主界面,而且对错误输入有一定纠错能力。
4.1.2.输入函数
void input()
{
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file studentdent.dat error! Strike any key to exit!");
exit(0);
}
while(fscanf(fp,"%s %s%d%s %s %s %s %s",student[i].number,student[i].name,&student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email)==8)
{
i++;
}
fclose(fp);
n=i;
printf("录入完成!\n");
}
说明:此函数功效是从文件中录入信息。首先定义了一个文件指针fp,用她来打开文件student.dat(事先已经储存),经过while循环录入信息,最终关闭文件。显示录入信息成功!
4.1.3.查询函数
void inquir()
{int i,j,item,flag;
char s1[LEN];
printf("------------------\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("3.退出本菜单\n");
printf("------------------\n");
while(1)
{ printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("请输入要查询学生学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(student[i].number,s1)==0)
{ flag=1;
printf("该学生学号,姓名,年纪,性别,出生年月,地址,电话,E-email 分别为:\n");
printf("%s %s %d %s %s %s %s %s\n",student[i].number,student[i].name,student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email);
}
if(flag==0)
printf("该学号不存在!\n");
break;
case 2:
printf("请输入要查询学生姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(student[i].name,s1)==0)
{ flag=1;
printf("该学生学号,姓名,年纪,性别,出生年月,地址,电话,E-email 分别为:\n");
printf("%s %s %d %s %s %s %s %s\n",student[i].number,student[i].name,student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email);
}
if(flag==0)
printf("该姓名不存在!\n");
break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
说明:首先定义一个变量,输入值经过switch来选择对应模块。用一个for循环和字符串比较函数来不停把输入数据和系统储存信息比较,假如相同,则输出信息。不然提醒信息不存在!
4.1.4.修改信息函数
void modify()
{
int i,j,item,num;
char sex1[3],s1[LEN],s2[LEN];
printf("请输入要要修改学生学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(student[i].number,s1)==0)
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年纪\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-email地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while(1)
{ printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新姓名:\n");
scanf("%s",s2);
strcpy(student[num].name,s2); break;
case 2:
printf("请输入新年纪:\n");
scanf("%d",&student[num].age);break;
case 3:
printf("请输入新性别:\n");
scanf("%s",sex1);
strcpy(student[num].sex,sex1); break;
case 4:
printf("请输入新出生年月:\n");
scanf("%s",s2);
strcpy(student[num].time,s2); break;
case 5:
printf("请输入新地址:\n");
scanf("%s",s2);
strcpy(student[num].add,s2); break;
case 6:
printf("请输入新电话号码:\n");
scanf("%s",s2);
strcpy(student[num].tel,s2); break;
case 7:
printf("请输入新E-email地址:\n");
scanf("%s",s2);
strcpy(student[num].email,s2); break;
case 8:return;
default:printf("请在1-8之间选择\n");
}
}
}
说明:首先输入要修改信息学号,一样经过字符串比较函数来判定学号是否存在。假如存在则经过switch语句来选择需要修改信息,修改经过字符串复制函数。修改结束后能够选择退出该模块,进入主界面。
4.1.5.增加信息函数
void increase()
{ int i=n,j,flag;
printf("请输入待增加学生数:\n");
scanf("%d",&m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("请输入第 %d 个学生学号:\n",i+1);
scanf("%s",student[i].number);
for(j=0;j<i;j++)
if(strcmp(student[i].number,student[j].number)==0)
{ printf("已经有该学号,请检验后重新录入!\n");
flag=1;
break;
}
}
printf("请输入第 %d 个学生姓名:\n",i+1);
scanf("%s",student[i].name);
printf("请输入第 %d 个学生年纪:\n",i+1);
scanf("%d",&student[i].age);
printf("请输入第 %d 个学生性别:\n",i+1);
scanf("%s",student[i].sex);
printf("请输入第 %d 个学生出生年月:(格式:年.月)\n",i+1);
scanf("%s",student[i].time);
printf("请输入第 %d 个学生地址:\n",i+1);
scanf("%s",student[i].add);
printf("请输入第 %d 个学生电话:\n",i+1);
scanf("%s",student[i].tel);
printf("请输入第 %d 个学生E-email:\n",i+1);
scanf("%s",student[i].email);
if(flag==0)
{
i++;
}
}while(i<n+m);
n+=m;
printf("录入完成!\n\n");
}
说明:首先判定学号是否存在,假如存在,则提醒学号已经存在。不然经过循环依次输入学生多种信息,输入结束后返回主界面。
4.1.6删除信息函数.
void del()
{ int i,j,flag=0;
char s1[LEN+1];
printf("请输入要删除学生学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(student[i].number,s1)==0)
{ flag=1;
for(j=i;j<n-1;j++)
student[j]=student[j+1];
}
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
{
n--;
printf("删除成功,显示结果请选择菜单6\n");
}
}
说明:该函数目标是为了删除学生信息,我们定义了四个变量,其中数组s1用来输入需要删除学生学号。i为for循环变量,用来遍历全部学生信息,经过strcmp函数来判定该学号是否存在。假如存在,将定义变量flag赋值为1,同时将i后面每一个学生信息全部赋给前一个学生信息,达成删除效果。假如学号不存在,那么flag为0,这时系统则提醒学号不存在。函数调用完后返回主界面,能够继续选择其它模块功效。
4.1.7.输出信息函数
void output()
{ int i;
printf("全部学生信息为:\n");
for(i=0;i<n;i++)
{
printf("%s %s %d %s %s %s %s %s\n",student[i].number,student[i].name,student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email);
}
}
说明:此函数是为了输出全部学生信息,要实现比较简单,只需直接经过一个循环将结构体中元素遍历输出即可。输出后返回主界面。
4.1.8保留信息函数
void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<n;i++)
{ fprintf(fp,"%s %s %d %s %s %s %s %s\n",student[i].number,student[i].name,student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email);
}
fclose(fp);
}
说明:定义该函数是为了保留信息至文件,首先必需定义一个文件指针,用指针打开函数打开一个已经存放好文件,经过一个循环将n个学生信息存进文件。最终关闭文件,以确保信息不会丢失。函数调用完成后返回主界面,从而能够继续操作程序。
4、组员名单
XXX 14160127 模块:删除学生信息、输出学生信息、将信息存入文件
XXX 14160125 模块:结构体定义、录入信息
XXX 14160103 模块:修改学生信息
XXX 14160119 模块:查询学生信息
XXX 14160140 模块:主界面、增加学生信息
5、结论和心得
XXX:在这次C程序课程设计中我负责三个模块,分别是:删除学生信息,输出学生信息和将学生信息存入文件。我负责是相对比较简单模块,实现时候不是很吃力。但还是存在很多小问题,列如忘记分号啊、一些表示式位置不正确造成逻辑错误等等。在这次设计中我体会到了写程序一定得细心,因为几乎全对还是等于错误,细节决定成败。另外也加强了组员中友谊,有很多问题全部是大家一起讨论处理。我们讨论分配了各自负责模块,在接口方面我们开始有部分分歧,但最终全部达成了一致。我们每个人全部在努力,当最终我们用文件包含语句将全部模块包含起来运行成功那一刻,我认为我付出得到了收获。当然这收获不仅仅是成功完成了作业,更多是过程中那种不懈努力精神,组员间相互帮助鼓舞,让我收益良多。当然也要感谢老师在设计中对我帮助,给我启发,谢谢你们!
XXX:经过此次C语言程序设计实践,我实在是获益不浅!C语言是这个学期才开始学习,有很多地方全部没弄懂,所以一开始做题,也是有点模糊,在指导老师指导下,我们慢慢进入状态,我们做是一个学生信息管理系统,内容包含很多。利用函数也是很复杂,我们一组有五个人,我们分工合作,我们每个人各负责一块功效区域,经过几星期努力,我们完成了大半个程序,不过总是有很多错误出现,有好多是些小问题,这全部是我们粗心大意造成,所以设计程序一定要仔细,不容一点马虎。同时,也让我们知道了,合作力量,假如是孤军奋战话,我们也不能在要求时间内完成,当然,也多亏老师指导。
程序设计过程有如处理一实际问题,从处理实际问题角度,我们能够这么来看:首先要了解这个问题基础要求,即输入、输出、完成从输入到输出要求是什么;其次,从问题要害入手,以前到后处理问题每个方面,即从输入开始入手,着重考虑怎样从输入导出输出,在这个过程中,可确定所需变量、数组、函数,然后确定处理过程--算法。可得最终结论。在程序设计中,可认为也是一个社会,每个一同社会组员全部有不一样想法。程序设计学得好坏要看你在社会中处理问题能力高低,所以不一样人编程结果是不一样。在这个社会中,经验和想法最为关键。
这次设计,让我掌握了C语言,而且还得到了用C语言处理实际问题宝贵经验!
XXX:这学期我们学C语言,以前就听过这个名字,打开书一看简直一窍不通,学好这门科简直就是一个挑战,课前课后全部要把书啃一遍,要不然上课就跟不上,最终学期快结束了,我们有一个课程设计,完成一个复杂程序,我们题目是做"简易学生通讯录系统",难度不小啊。经过组员分工合作。最终还是完成了设计。
首先感谢郭美老师给帮助。经过这次课程设计使我们知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对部分前面学过知识了解得不够深刻,掌握得不够牢靠,比如说结构体,指针,链表……经过这次课程设计以后,我们把前面所学过知识又重新温故了一遍。
做它,难就难在不知从何开始,这个时候才知道上课老师们不厌其烦教导是多么宝贵,这个时候才后悔上课时候没有认真听讲。可是现在一切全部晚了,还好时间还算是充裕,只好拿出书本重新复习一下。 尤其是结构体,指针部分,几乎是一片空白。不过经过几天努力,大致上把书本上知识点看了一遍,知识点也全部基础是撑握了,所以一下一步就是开始正式编程序了。不过毕竟是个新手,还是不知怎样下手,于是就在网上下了一篇类似程序,经过仔细研究,最终读懂了C语言编程基础过程和方法。 经过一波三折,最终开始正式编程。
编程是一件很枯燥很无聊事情,不过出于完成作业,得到学分压力,还必需强破自己坚持下去,根据老师所说模块化思想,分部分进行编写。而且编程是一件高精度、模范化事情,稍有疏乎全部会影响全局,也可能因为某一处小错误而造成整个程序无法运行。所以认真仔细就是很关键了。
在这次合作中我是负责“修改信息”这一模块:(以下) void modify() /*修改信息*/
{int i,j,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准 */
printf("请输入要要修改学生学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年纪\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while(1)
{ printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新姓名:\n");
scanf("%s",s2);
strcpy(stu[num].name,s2); break;
case 2:
printf("请输入新年纪:\n");
scanf("%d",&stu[num].age);break;
case 3:
printf("请输入新性别:\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1); break;
case 4:
printf("请输入新出生年月:\n");
scanf("%s",s2);
strcpy(stu[num].time,s2); break;
case 5:
printf("请输入新地址:\n");
scanf("%s",s2);
strcpy(stu[num].add,s2); break;
case 6:
printf("请输入新电话号码:\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2); break;
case 7:
printf("请输入新E-mail地址:\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2); break;
case 8:return;
default:printf("请在1-8之间选择\n");
}
}
} 看起来很简短一点点程序,它可好费了我不少精力和时间。其间,还是碰到过部分问题。不过很其它多个模块相比,还是相对简单。 char sex1[3],s1[LEN+1],s2[LEN+1];一开始,写成 char sex1[3],s1[LEN],s2[LEN]; 以后以后经过数次调试,还是认为 以姓名和学号最长长度+1为好。还有在编写时,总是出现部分低级错误(如:语句后忘记了";",忘记了输入,输出函数里面%号,"%s",s2里忘记','.还有忘记了运“break”,直到以后才发觉这个问题。)。除了这些问题,错误。 开始时候真感觉编程是一件很无聊事情,不过当一个程序运行成功时候那种喜悦是无法言语,那种成就感是无法比拟。又经过几天努力,最终把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很快乐。不管怎样是自己劳动结果,是自己经过努力得到成绩,同时也是学习C语言一次实践作业,自己进步证实。
经过这次课程设计,使我对C语言有了更深入认识和了解,要想学好它要重在实践,要经过不停上机操作才能愈加好地学习它,我也发觉我好多不足之处,首先是自己在指法上还不行,常常按错字母,经过学习也有所改善;再有对C语言部分标准库函数不太了解,还有对函数调用正确使用不够熟悉,还有对C语言中常常出现错误也不了解,经过实践学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它语言,和其它计算机方面知识全部要重在实践,因以后在学习过程中,我会愈加注视实践操作,使自己便好地学好计算机。
在课程设计过程中,收获知识,提升能力同时,我也学到了大家生哲理,知道怎么样去制订计划,怎么样去实现这个计划,并掌握了在实施过程中怎么样去克服心理上不良情绪。所以在以后生活和学习过程中,我一定会把课程设计精神带到生活中,不畏艰苦,勇往直前!
XXX:这学期开始接触了C语言,刚开始是有点担心,因为人家说编程极难,不过经过后天学习,接触多了后发觉原来也不是极难,尤其是用电脑开始编部分小程序以后,就发觉了C语言乐趣。此次C语言程序设计实践,我们这组做是一个学生信息管理系统,我们一组有五个人,分工合作,每个人各负责一部分,内容包含很多。利用函数也是很复杂,经过几星期努力,我们最终完成了,经过这次实践,我明白了,编程是一件需要很细心工作,而且需要耐心,更关键是需要团体合作,一个人力量太微弱了,我们小组在负责各自区域同时,也和其它组员亲密联络和交流,这么我们完成进度和质量远远超出了我们预期,很好诠释了1+1+1+1+1>5道理,即使这个过程我们碰到过很多困难,不过我们相互交流,到网上搜索资料,最终还是把困难一一处理了,这次我得到最大收获就是,团体合作和体会到了编程乐趣,只要我们以后还能坚持下去,我们一定能够编写出很优异程序。
陈赳赳:在这次课程设计中我负责是主界面跟修改菜单,在这之中我不仅检验了我所学习知识,也培养了我怎样去把握一件事情,怎样去做一件事情,又怎样完成一件事情。课程设计是我们专业课程知识综合应用实践训练,有时候书本上学习知识不够编某个程序,就需要自己找资料。体会了学以致用、突出自己劳动结果喜悦心情,从中发觉自己平时学习不足和微弱步骤,从而加以填补。在我们一组人努力下课程设计最终完成。在课程设计时有很多问题是我不能处理,全部要找同学一起想,让我认识到了团体关键性。
6、致谢
感谢老师在百忙之中抽出宝贵时间批阅。让我在此向你表示最真挚问候:老师,您辛劳了﹗
展开阅读全文