c语言课程设计报告及其源代码.docx

上传人:b****6 文档编号:8298879 上传时间:2023-01-30 格式:DOCX 页数:36 大小:722.78KB
下载 相关 举报
c语言课程设计报告及其源代码.docx_第1页
第1页 / 共36页
c语言课程设计报告及其源代码.docx_第2页
第2页 / 共36页
c语言课程设计报告及其源代码.docx_第3页
第3页 / 共36页
c语言课程设计报告及其源代码.docx_第4页
第4页 / 共36页
c语言课程设计报告及其源代码.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

c语言课程设计报告及其源代码.docx

《c语言课程设计报告及其源代码.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告及其源代码.docx(36页珍藏版)》请在冰豆网上搜索。

c语言课程设计报告及其源代码.docx

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;i

for(j=0;j

if(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;i

for(j=0;j

if(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&&i

if(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&&i

if(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&&i

if(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",&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1