c语言课程设计报告及其源代码.docx
《c语言课程设计报告及其源代码.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告及其源代码.docx(36页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告及其源代码
西安郵電學院
C语言课程设计报告书
系部名称
通信工程系
学生姓名
王子源
专业名称
通信工程专业
班级
通工0901班
学号
03091001
指导教师
衡霞
时间
2010年06月07日至
2010年06月18日
实验题目 学生宿舍管理系统
一、 实验目的
通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。
利用系统提供的标准函数和自定义函数进行程序设计,培养利用C语言设计综合程序的能力。
二、实验内容
在熟练掌握C语言的基本知识:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用。
三、需求分析
本学生信息管理系统包含输入记录,显示记录,按房间号排序并显示,按学号排序并显示,插入一条记录按学号排序并显示,按姓名查找,删除一条记录,查找并显示一个记录,查找并修改一个记录,从文件中读入数据,循环写入数据等功能.
需求分析:
输入记录(Input)
显示记录(Display)
按房间号排序并显示(Sort_by_roomnum)
按学号排序并显示(Sort_by_num)
插入一条记录按学号排序并显示(Insert_a_record)
按姓名查找,删除一条记录(Delete_a_record)
查找并显示一个记录(Query_a_record)
查找并修改一个记录(Change_a_record)
从文件中读入数据(AddfromText)
循环写入数据(WritetoText)
四.概要设计
1.系统分析
功能模块图:
总目录以及下属的各个模块,这样可以使得程序的书写脉络清晰流畅。
程序结构图
2、模块功能说明
(1)输入记录模块(Input):
用于输入学生的各项信息
(2)显示记录模块(Display):
按照输入的顺序显示出每个学生的各项信息
(3)按房间号排序并显示模块(Sort_by_roomnum):
按照房间号顺序显示每个学生信息
(4)按学号排序并显示模块(Sort_by_num):
按照学号顺序显示每个学生信息
(5)插入一条记录按学号排序并显示模块(Insert_a_record):
插入一条记录并按学号显示出所有记录。
(6)按姓名查找,删除一条记录模块(Delete_a_record):
查找一个姓名,并删除该模块
(7)查找并显示一个记录模块(Query_a_record):
查找一条记录并显示该记录
(8)查找并修改一个记录模块(Change_a_record):
按姓名查找并修改某个其中一个记录模块
(9)从文件中读入数据模块(AddfromText):
用fscanf语句从文件读取信息
(10)循环写入数据模块(WritetoText):
用fprintf语句向已知(未知)文件读取信息,并返回读取信息
五.详细设计及运行结果
主程序流程图
函数调用关系
按房间号排序并显示
按学号排序并显示
插入一条记录并按学号排序
按姓名查找删除一条记录
查找并显示一个记录
查找并修改一个记录
从文件中读入数据
循环写入数据
源代码以及运行结果:
程序设计编码见附录
详细运行结果
1)登陆界面
输入密码:
错误了,
成功输入界面
2)进入主菜单
3)输入记录后显示记录
4)按房间号排序
5)学号排序
6)插入记录并按学号排序
7)删除记录
8)查找并显示
9)查找并修改记录
修改成功
10)保存文件
文件及内容保存成功!
11)读取文件
文件读取成功!
六、调试情况,设计技巧及体会
测试数据
原始数据:
房间号床位号学号姓名班级性别
14604503091002haha0908man
10304503091005huha0901man
23500403091033dfgh0902woman
10204503091055woyu0901man
16500803091065tata0904man
10500403091068tagi0902woman
11300803091088jijk0904man
45800803091089aabb0904man
40400403098656shaz0985woman
按房间号排序后数据:
房间号床位号学号姓名班级性别
10204503091055woyu0901man
10304503091005huha0901man
10500403091068tagi0902woman
11300803091088jijk0904man
14604503091002haha0908man
16500803091065tata0904man
23500403091033dfgh0902woman
40400403098656shaz0985woman
45800803091089aabb0904man
按学号排序后数据:
房间号床位号学号姓名班级性别
14604503091002haha0908man
10304503091005huha0901man
23500403091033dfgh0902woman
10204503091055woyu0901man
16500803091065tata0904man
10500403091068tagi0902woman
11300803091088jijk0904man
45800803091089aabb0904man
40400403098656shaz0985woman
个人总结
通过这次的C语言程序设计,从总共两个星期的时间,其中选题花了我将近3天的时间,最终还是决定选择学生宿舍管理系统,紧接着就确定了功能模块,总共确立了十个功能模块,相对比较繁琐,但是由于时间还是比较紧的,所以没有能进一步修改。
这次程序设计过程中,我觉得最难的就是每个模块的逻辑分析过程,尤其是函数的返回值问题,例如,在数据添加后,用以下函数
intInput(Studentroom[],intn)/*输入若干条记录*/
{inti=0;
charsign;/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
system("cls");
printf("\t\t房间号:
");/*交互输入*/
scanf("\t\t%s",&room[n+i].roomnum);
printf("\t\t床位号:
");
scanf("\t\t%s",&room[n+i].bednum);
printf("\t\t学号:
");
scanf("\t\t%s",&room[n+i].num);
printf("\t\t班级:
");
scanf("\t\t%s",&room[n+i].classnum);
printf("\t\t姓名:
");
scanf("\t\t%s",&room[n+i].name);
printf("\t\t性别:
");
scanf("\t\t%s",&room[n+i].sex);
printf("\t\t是否继续输入?
(Y/N)");
scanf("\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
其中返回值是的是i还是i++我花费了很长时间才分析出来,最后还是在纸笔的计算下,完成了这个模块。
其次,在程序模块简化过程中,我也意识到了要熟练掌握C语言各项基本只是才能简化,例如,在排序模块中,一开始我用的是以下代码
{strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
strcpy(t,room[j+1].bednum);
strcpy(room[j+1].bednum,room[j].bednum);
strcpy(room[j].bednum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
strcpy(room[j+1].classnum,room[j].classnum);
strcpy(room[j].classnum,t);
strcpy(room[j+1].sex,room[j].sex);
strcpy(room[j].sex,t);
}
然后再老师的提醒下,我才发现,可以定义另一个结构体Studentt;然后用
T=room[j];
room[j]=room[j+1];
room[j+1]=t
简单三行就解决了上面的麻烦,这更让我领会到了C语言的魅力..
另外,还学习到了system(“pause”);语句就是在屏幕上按任意键继续的意思,相当与
{
printf(“按任意键继续”);
getch();
}
所以,我还有许多要改进的地方。
当然,我还更加体会到了团队的力量,当我有问题的时候要勇于和同学探讨问题,自己也要能帮助不明白的同学,在这样的情况下,大家才能更加熟练地学习自己还不懂得知识。
所以,这更是一个团队互相帮助的成果。
以后,要想把计算机方面的知识学好,一定要更加努力!
!
结束语
这次C语言程序实习让我渐渐体会到了编程的乐趣,但是也意识到了自己的不足,一个人的成功是靠努力换来的,只有付出了,才会有收获!
参考文献:
《C语言程序设计》(第二版) 王曙燕 科学出版社
最后,感谢机房各位老师对我的监督辅导!
七、源程序清单(略)
#include/*引用库函数*/
#include
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charroomnum[4];/*房间号*/
charbednum[4];/*床位号*/
charclassnum[10];/*班级*/
charnum[10];/*学号*/
charname[20];/*姓名*/
charsex[10];/*性别*/
}Student;
Studentroom1[1000];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
intc;
do{
system("cls");/*运行前清屏*/
printf("\t\t★★★★★★学生宿舍管理系统★★★★★★\n");/*菜单选择*/
printf("\t\t§1.输入记录§\n");
printf("\t\t§2.显示记录§\n");
printf("\t\t§3.按房间号排序并显示§\n");
printf("\t\t§4.按学号排序并显示§\n");
printf("\t\t§5.插入一条记录按学号排序并显示§\n");
printf("\t\t§6.按姓名查找,删除一条记录§\n");
printf("\t\t§7查找并显示一个记录§\n");
printf("\t\t§8查找并修改一个记录§\n");
printf("\t\t§9.从文件中读入数据§\n");
printf("\t\t§10.循环写入数据§\n");
printf("\t\t§0.结束程序§\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t请选择您要运行的选项按(0-10):
");
scanf("%d",&c);/*读入选择*/
}while(c<0||c>10);
return(c);/*返回选择*/
}
intInput(Studentroom[],intn)/*输入若干条记录*/
{inti=0;
charsign;/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
system("cls");
printf("\t\t房间号:
");/*交互输入*/
scanf("\t\t%s",&room[n+i].roomnum);
printf("\t\t床位号:
");
scanf("\t\t%s",&room[n+i].bednum);
printf("\t\t学号:
");
scanf("\t\t%s",&room[n+i].num);
printf("\t\t班级:
");
scanf("\t\t%s",&room[n+i].classnum);
printf("\t\t姓名:
");
scanf("\t\t%s",&room[n+i].name);
printf("\t\t性别:
");
scanf("\t\t%s",&room[n+i].sex);
printf("\t\t是否继续输入?
(Y/N)");
scanf("\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
voidDisplay(Studentroom[],intn)/*显示所有记录*/
{
inti;
printf("\t\t------------------------------------------------------------\n");/*格式头*/
printf("\t\t房间号床位号学号姓名班级性别\n");
printf("\t\t------------------------------------------------------------\n");
for(i=1;i{
printf("\t\t%-10s%-10s%-10s%-10s%-10s%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[i-1].num,room[i-1].name,room[i-1].classnum,room[i-1].sex);
}
printf("\t\t");
system("pause");
}
voidSort_by_num(Studentroom[],intn)/*按学号排序*/
{
inti,j;
Studentt;
for(i=0;ifor(j=0;jif(strcmp(room[j].num,room[j+1].num)>0)
{
t=room[j+1];
room[j+1]=room[j];
room[j]=t;
}
}
voidSort_by_roomnum(Studentroom[],intn)/*按房间号排序*/
{
inti,j;
Studentt;
for(i=0;ifor(j=0;jif(strcmp(room[j].roomnum,room[j+1].roomnum)>0)
{t=room[j+1];
room[j+1]=room[j];
room[j]=t;
}
}
intInsert_a_record(Studentroom[],intn)/*插入一条记录*/
{
printf("\t\t学生房间号:
");/*交互式输入*/
scanf("\t\t%s",&room[n].roomnum);
printf("\t\t学生床位号:
");
scanf("\t\t%s",&room[n].bednum);
printf("\t\t学生学号:
");
scanf("\t\t%s",&room[n].num);
printf("\t\t学生姓名:
");
scanf("\t\t%s",&room[n].name);
printf("\t\t学生班级:
");
scanf("\t\t%s",&room[n].classnum);
printf("\t\t学生性别:
");
scanf("\t\t%s",&room[n].sex);
n++;
printf("\n");
system("pause");
Sort_by_num(room,n);/*调用排序函数*/
printf("\t\t插入记录成功!
\n");/*返回成功信息*/
return(n);
}
intDelete_a_record(Studentroom[],intn)/*按姓名查找,删除一条记录*/
{
chars[20];
inti=0,j;
printf("\t\t输入他(她)的姓名:
");/*交互式问寻*/
scanf("%s",s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没找到该学生!
\n");/*返回失败信息*/
return(n);
}
for(j=i;j{
room[j]=room[j+1];
}
printf("\t\t删除记录成功!
\n");/*返回成功信息*/
return(n-1);
}
voidQuery_a_record(Studentroom[],intn)/*查找并显示一个记录*/
{
chars[20];
inti=0;
printf("\t\t输入他(她)的姓名:
");/*输入*/
scanf("\t\t%s",&s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没找到该学生!
\n");/*输入失败信息*/
return;
}
printf("\t\t他(她)的房间号:
%s\n",room[i].roomnum);/*输出该学生信息*/
printf("\t\t他(她)的床位号:
%s\n",room[i].bednum);
printf("\t\t他(她)的学号:
%s\n",room[i].num);
printf("\t\t他(她)的班级:
%s\n",room[i].classnum);
printf("\t\t他(她)的性别:
%s\n",room[i].sex);
}
voidChange_a_record(Studentroom[],intn)/*查找并修改一个信息*/
{chars[20],m[4];
inti=0;
intc;
printf("\t\t输入他的姓名:
");
scanf("\t\t%s",&s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没找到该学生!
\n");
system("pause");
return;
}
//do
system("cls");
printf("\t\t★★★★★★修改项目内容信息★★★★★★\n");/*菜单选择*/
printf("\t\t§1.房间号§\n");
printf("\t\t§2.床位号§\n");
printf("\t\t§3.学号§\n");
printf("\t\t§4.姓名§\n");
printf("\t\t§5.班级§\n");
printf("\t\t§6.性别§\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t请选择您要修改的选项按(0-6):
");
scanf("%d",&c);/*读入选择*/
switch(c)
{
case1:
printf("\t\t请输入你要修改后的房间号:
");
scanf("%s",&m);/*录入选择*/
strcpy(room[i].roomnum,m);/*覆盖信息*/
printf("恭喜你,修改成功!
\n");
system("pause");
break;
case2:
printf("\t\t请输入你要修改后的床位号:
");
scanf("%s",&m);
strcpy(room[i].bednum,m);
printf("恭喜你,修改成功!
\n");
system("pause");
break;
case3:
printf("\t\t请输入你要修改后的学号:
");
scanf("%s",&m);
strcpy(room[i].num,m);
printf("恭喜你,修改成功!
\n");
system("pause");
break;
case4:
printf("\t\t请输入你要修改后的姓名:
");
scanf("%s",&m);
strcpy(room[i].name,m);
printf("恭喜你,修改成功!
\n");
system("pause");
break;
case5:
printf("\t\t请输入你要修改后的班级:
");
scanf("%s",&