新生报名系统.docx
《新生报名系统.docx》由会员分享,可在线阅读,更多相关《新生报名系统.docx(22页珍藏版)》请在冰豆网上搜索。
![新生报名系统.docx](https://file1.bdocx.com/fileroot1/2023-2/28/e021f976-35f0-426c-ba1c-5f04b8da7a76/e021f976-35f0-426c-ba1c-5f04b8da7a761.gif)
新生报名系统
课程设计
学号
班级
姓名
指导教师
2008年6月27日
课程设计任务书
课程设计题目:
新生报名系统
一、课程设计时间
20007~08第2学期第17周,即6月23~27日,共计1周,20学时。
二、课程设计内容:
用c语言编写软件完成新生报名系统,新生名单存放在
file18.txt文件中。
程序应具有以下菜单,并实现其功能:
(1)从file18.txt中读入新生的信息(学号,姓名,民族,省份,高考分数,专业),并保存到myfile.txt文件中;
(2)新生报到;
(3)打印所有未报到的新生;
(4)学生信息查询(根据学号,姓名,省份);
(5)将新的学生信息保存到myfile.txt文件中;
(6)退出程序。
三、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
●课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模版。
四、指导教师和学生签名:
指导教师:
_______________学生签名_____________
五、成绩
六、教师评
目录
一、需求分析..................................................4
二、程序流程图................................................6
三、核心技术的实现说明及相应程序段.........8
四、个人总结.....................................................12
五、参考文献......................................................14
六、源程序...........................................................14
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:
录入信息函数luru(),新生报到函数baodao(),打印未报到的学生函数dayin(),查询学生信息函数chaxun(),退出函数exit(0)和主函数main()。
(显示菜单)。
1、录入信息函数,定义两文件型指针变量fp1(指向
file18.txt文本文件),fp2(指向myfile.txt文本文件),fp1指向file18.txt文件,用(fp1=fopen(“d:
\\file18.txt”,"r+”))
==NULL语句打开file18.txt文本文件,若不能打开,输出(“不能打开文件”)从file18.txt文本文件中读入新生的信息,并输入到结构体stud[i]中,再经结构体stud[i]和指针fp2传递到myfile.txt文本中,实现文件的录入和保存。
2、新生报到函数,先输入报到学生的人数,确立循环次数,再令用户输入报到学生的学号,用strcmp()函数对用户输入学生学号number与读入到结构体stud[i]中成员xuehao进行比较,若相同,令另一成员dao(原赋值为0)赋新值1。
3、打印未报到的学生函数,定义文件指针变量wenjian打开文件file18.txt,将信息赋到结构体stud[i]中,用if语句判断,输出结构体stud[i]中成员dao=0的元素项。
4、查询学生信息函数定义文件型指针变量fp1和字符型数组a[13],打开file18.txt文本文件,并将信息赋给结构体stud[i],输入12位学号给字符型数组a[13],用strcmp()函数对字符型数组a[13]和结构体变量stud[i]中成员学号比较,输出相同的结构体中的元素,没有相同的,输出(“没有该同学信息”)。
5、主函数main(),输出菜单,并用switch语句定义了6个分支,实现多功能结构的选择。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生信息都包括学号,姓名,民族,省份,分数,和专业.在程序当中,将学生使用信息类型定义为结构体类型,其他函数每次对学生信息的访问,其数据来源都是file18.txt文件,这样做不但可以保证学生信息数据的一致性,而且可以对学生信息进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序整体流程图及各子函数流程图
1.程序整体流程图
(1)录入学生信息流程图
(2)新生报到流程图
(3)打印未报到学生流程图
(4)查询学生信息流程图
三。
核心技术的实现说明及相关程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,录入信息函数luru()、新生报到函数baodao(),打印未报到学生信息函数dayin()和查询函数chaxun()是程序中较为核心的部分,下面分别进行说明
1录入信息函数luru()
录入信息函数是在文件file18.txt已经存在的情况下,此时文件要以读写方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下:
voidluru()
{
FILE*fp1,*fp2;
inti;
if((fp1=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fscanf(fp1,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp1);
if((fp2=fopen("d:
\\myfile.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fprintf(fp2,"%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp2);
}
2新生报到函数baodao()
此程序的核心是以下程序段:
printf("\n请输入本次报到的学生数量:
");
scanf("%d",&shu);
for(j=0;j{
flag=0;
printf("\n请输入学生学号:
");
scanf("%s",number);
for(i=0;i<20;i++)
{
if(strcmp(stud[i].xuehao,number)==0)
{stud[i].dao=1;
flag++;
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);}
}
if(flag==0)
{
printf("\n找不到这个学生信息");
}
}
3打印未报到学生信息
voiddayin()
{
FILE*wenjian;
inti,flag=0;
if((wenjian=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\nCannotopenfiel");
return;
}
printf("\n未报到的新生信息");
printf("\n");
for(i=0;i<20;i++)
{
fscanf(wenjian,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
if(stud[i].dao==0)
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
fclose(wenjian);
}
4查询学生信息
voidchaxun()
{
FILE*fp1;
inti;
if((fp1=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fscanf(fp1,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp1);
chara[13];
puts("请输入学生信息\n");
scanf("%s",a);
{for(i=0;i<20;i++)
if(strcmp(stud[i].xuehao,a)==0)
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
if(strcmp(stud[i].xuehao,a)!
=0)
printf("没有该同学信息");
}
5显示菜单函数
该函数使用了一个switch选择语句,的功能是简化其操作性,帮助用户正确使用该软件,使得该软件操作性更强,更有人性化。
具体的程序段如下:
voidmain()
{
inti;
for(;;)
{
printf("\n--------------欢迎使用新生报到系统---------------");
printf("\n--------------1录入信息--------------------------");
printf("\n--------------2新生报到--------------------------");
printf("\n--------------3打印未报到的学生------------------");
printf("\n--------------4查询学生信息----------------------");
printf("\n--------------5退出---------------------------");
printf("\n--------------请选择-------------------------\n\t");
scanf("%d",&i);
switch(i)
{
case1:
clear();luru();break;
case2:
clear();baodao();break;
case3:
clear();dayin();break;
case4:
clear();chaxun();break;
case5:
clear();exit(0);break;
default:
printf("\n输入错误");
}
}
}
四、个人总结
在C语言课程设计的这一周里,自己收获很大。
经过了在课程设计前一周的充分的准备,自己对c语言教材又系统地的看了一遍,使自己这一学年的所学知识连贯了起来,有了完整而深刻的理解,又参考了以前的c语言编程题目,弥补了理论知识层面上的漏洞和不足,使自己有准备的迎接了课设的来临。
这次的课程设计任务把文件,指针和结构体等方面的知识结合在一起进行考察,对自己的知识掌握程度要求比较高,因此自己又查阅了一些课外资料,使自己得到了进一步的充实。
经过自己的努力,老师和同学的帮助,自己完成了课设要求的任务,当然,过程中充满了辛苦和委屈,特别是当内存卡感染病毒,不得不对自己辛苦做出的程序作删除处理时,心中的痛是别人无法理解的,不过这些都已经成为自己美好的记忆,伴随自己一生。
除此之外,令我记忆深刻的是老师对工作严谨的态度,这也是一个科研工作者应有的工作作风,我会记住他的对我们程序的要求:
简练,再简练!
这些也是自己这一周的最大收获之一。
五、参考文献
1.谭浩强.C程序设计.北京:
清华大学出版社,2005
2.刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
3.袁蒲佳,唐谦等C语言程序设计华中科技大学出版社,2007年1月
六、源程序
#include
#include
#include
structstudent
{
charxuehao[13];
charxingming[10];
charminzu[10];
charsheng[15];
intfenshu;
charzhuanye[30];
intdao;
}stud[20];
voidluru()
{
FILE*fp1,*fp2;
inti;
if((fp1=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fscanf(fp1,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp1);
if((fp2=fopen("d:
\\myfile.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fprintf(fp2,"%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp2);
}
voidbaodao()
{
FILE*fp;
inti,flag=0,shu,j;
charnumber[20];
if((fp=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\nCannotopenfiel");
return;
}
for(i=0;i<20;i++)
{
fscanf(fp,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
}
printf("\n请输入本次报到的学生数量:
");
scanf("%d",&shu);
for(j=0;j{
flag=0;
printf("\n请输入学生学号:
");
scanf("%s",number);
for(i=0;i<20;i++)
{
if(strcmp(stud[i].xuehao,number)==0)
{stud[i].dao=1;
flag++;
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);}
}
if(flag==0)
{
printf("\n找不到这个学生信息");
}
}
fclose(fp);
if((fp=fopen("d:
\\myfile.txt","r+"))==NULL)
{
printf("\nCannotopenfile");
return;
}
fclose(fp);
}
voidclear()
{
system("cls");
}
voiddayin()
{
FILE*wenjian;
inti,flag=0;
if((wenjian=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\nCannotopenfiel");
return;
}
printf("\n未报到的新生信息");
printf("\n");
for(i=0;i<20;i++)
{
fscanf(wenjian,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
if(stud[i].dao==0)
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
fclose(wenjian);
}
voidchaxun()
{
FILE*fp1;
inti;
if((fp1=fopen("d:
\\file18.txt","r+"))==NULL)
{
printf("\n不能打开文件");
return;
}
for(i=0;i<20;i++)
{
fscanf(fp1,"%s%s%s%s%d%s",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,&stud[i].fenshu,stud[i].zhuanye);
}
fclose(fp1);
chara[13];
puts("请输入学生信息\n");
scanf("%s",a);
{for(i=0;i<20;i++)
if(strcmp(stud[i].xuehao,a)==0)
printf("%15s,%7s,%5s,%7s,%5d,%20s\n",stud[i].xuehao,stud[i].xingming,
stud[i].minzu,stud[i].sheng,stud[i].fenshu,stud[i].zhuanye);
}
if(strcmp(stud[i].xuehao,a)!
=0)
printf("没有该同学信息");
}
voidmain()
{
inti;
for(;;)
{
printf("\n---------欢迎使用新生报到系统---------------");
printf("\n--------------1录入信息--------------------------");
printf("\n--------------2新生报到--------------------------");
printf("\n----------3打印未报到的学生------------------");
printf("\n------------4查询学生信息----------------------");
printf("\n--------------5退出---------------------------");
printf("\n--------------请选择-------------------------\n\t");
scanf("%d",&i);
switch(i)
{
case1:
clear();luru();break;
case2:
clear();baodao();break;
case3:
clear();dayin();break;
case4:
clear();chaxun();break;
case5:
clear();exit(0);break;
default:
printf("\n输入错误");
}
}
}