C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计
学生宿舍管理系统设计
1.课程设计的目的
C语言程序设计课程设计是计算机科学与技术专业一门重要的专业技术基础课程,也是一门核心课程。
学生宿舍管理系统设计的目的是为了配合C语言程序设计课程的开设,使学生能够较熟练地掌握C语言的基本内容及程序设计的基本方法与编程技巧,并能够培养学生应用计算机解决和处理实际问题的思维方法与基本能力,为进一步学习和应用计算机的专业知识打下基础。
2.课程设计方案论证及程序清单
2.1课程设计方案论证
利用数组对宿舍的记录进行循环输入输出,利用冒泡法记录进行排序,利用循环查找数组中某个数据,在第一时间何以方便的寻找查找、删除、插入、保存、读入他们的信息在原有的基础上可以让提高查找的速度.达到方便、快捷、准确的目的。
应用我门所学的指针数组、结构提等.将这些数组与循环体结合起来从而有效的进行处理大规模的数据缩短了程序设计的长度从而提高了效率。
也运用了函数的调用,函数调用比较复简单,分静态和动态。
对其进行显示,删除,读入和写入文档等操作。
2.2总体功能框图
图1总体功能框图
2.3操作流程图:
图2操作流程图
2.4源程序清单
#include/*引用库函数*/
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charroomnum[4];/*房间号*/
charbednum[2];/*床位号*/
charnum[10];/*学号*/
charname[20];/*姓名*/
}Student;
Studentroom1[1000];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
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§0.结束程序§\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t请选择您要运行的选项按(0-9):
");
c=getchar();/*读入选择*/
}while(c<'0'||c>'9');
return(c-'0');/*返回选择*/
}
intInput(Studentroom[],intn)/*输入若干条记录*/
{inti=0;
charsign,x[10];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
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].name);
gets(x);/*清除多余的输入*/
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%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[i-1].num,room[i-1].name);
if(i>1&&i%10==0)/*每十个暂停*/
{printf("\t\t--------------------------------------------------\n");/*格式*/
printf("\t\t");
system("pause");
printf("\t\t--------------------------------------------------\n");
}
}
printf("\t\t");
system("pause");
}
voidSort_by_num(Studentroom[],intn)/*按学号排序*/
{
inti,j,*p,*q,s;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(room[j].num,room[j+1].num)>0)
{
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);
}
}
voidSort_by_roomnum(Studentroom[],intn)/*按房间号排序*/
{
inti,j,*p,*q,s;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(room[j].roomnum,room[j+1].roomnum)>0)
{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);
}
}
intInsert_a_record(Studentroom[],intn)/*插入一条记录*/
{charx[100];/*清除多余输入所用*/
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);
gets(x);
n++;
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{
strcpy(room[j].roomnum,room[j+1].roomnum);
strcpy(room[j].bednum,room[j+1].bednum);
strcpy(room[j].num,room[j+1].num);
strcpy(room[j].name,room[j+1].name);
}
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);
}
intAddfromText(Studentroom[],intn)/*从文件中读入数据*/
{
inti=0,num;
FILE*fp;/*定义文件指针*/
charfilename[20];/*定义文件名*/
printf("\t\t输入文件名:
");
scanf("\t\t%s",&filename);/*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL)/*打开文件*/
{
printf("\t\t无法打开该文件\n");/*打开失败信息*/
printf("\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);/*读入总记录量*/
while(i{
fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].bednum,room[n+i].num,room[n+i].name);
i++;
}
n+=num;
fclose(fp);/*关闭文件*/
printf("\t\t读入成功!
\n");
printf("\t\t");
system("pause");
return(n);
}
voidWritetoText(Studentroom[],intn)/*将所有记录写入文件*/
{
inti=0;
FILE*fp;/*定义文件指针*/
charfilename[100];/*定义文件名*/
printf("\t\t循环写入数据\n");/*输入文件名*/
printf("\t\t输入文件名:
");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"w"))==NULL)/*打开文件*/
{
printf("\t\t无法打开该文件\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);/*循环写入数据*/
while(i{
fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].bednum,room[i].num,room[i].name);
i++;
}
fclose(fp);/*关闭文件*/
printf("写入成功!
\n");/*返回成功信息*/
}
voidmain()/*主函数*/
{
intn=0;
for(;;)
{
switch(menu_select())/*选择判断*/
{
case1:
printf("\t\t输入记录\n");/*输入若干条记录*/
n=Input(room1,n);
break;
case2:
printf("\t\t显示记录\n");/*显示所有记录*/
Display(room1,n);
break;
case3:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n);/*按房间号排序*/
printf("\t\t排序成功!
\n");
Display(room1,n);
printf("\t\t");
break;
case4:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n);/*按学号排序*/
printf("\t\t\t排序成功!
\n");
Display(room1,n);
printf("\t\t");
break;
case5:
printf("\t\t插入一条记录按学号排序并显示\n");
n=Insert_a_record(room1,n);/*插入一条记录*/
Display(room1,n);
printf("\t\t");
break;
case6:
printf("\t\t按姓名查找,删除一条记录\n");
n=Delete_a_record(room1,n);/*按姓名查找,删除一条记录*/
printf("\t\t");
system("pause");
break;
case7:
printf("\t\t查找并显示一个记录\n");
Query_a_record(room1,n);/*查找并显示一个记录*/
printf("\t\t");
system("pause");
break;
case8:
printf("\t\t从文件中读入数据\n");
AddfromText(room1,n);/*从文件中读入数据*/
printf("\t\t");
system("pause");
break;
case9:
printf("\t\t循环写入数据\n");
WritetoText(room1,n);/*循环写入数据*/
printf("\t\t");
system("pause");
break;
case0:
printf("\t\t谢谢使用,祝您好运,再见!
\n");/*结束程序*/
printf("\t\t");
system("pause");
exit(0);
}
}
}
3.课程设计运行与分析
将程序进行编译链接后生成“学生管理系统.exe”运行该文件如图:
图3进入系统页面
按照提示选择“1”进行记录的输入(输入一个数据后提示是否继续输入)如图:
图4记录的输入界面
连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图:
图5记录的显示界面
显示后提示按任意键继续,按任意键后选择“3”进行记录的按床位号排序并显示,如图:
图6记录的按床位号排序并显示界面
显示后提示按任意键继续,按任意键后选择“4”进行记录的按学号排序并显示,如图:
图7记录的按学号排序显示界面
显示后提示按任意键继续,按任意键后选择“5”按提示步骤插入一条记录并显示,如图:
图8插入一条记录显示界面
显示后提示按任意键继续,按任意键后选择“6”按提示步骤删除一条记录,如果没找到该学生显示如图:
图9删除错误显示界面
如果有该学生显示如图:
图10删除成功显示界面
显示后提示按任意键继续,按任意键后选择“7”按提示步骤查找并显示一个记录,如图:
图11查询显示界面
显示后提示按任意键继续,按任意键后选择“8”按提示步骤查找原有记录文件如果找不到则显示如图:
图12查询不到的显示界面
如果有该文件则显示如图:
图13查询到的显示界面
显示后提示按任意键继续,按任意键后选择“9”按提示步骤循环写入记录,如图:
图14循环写入成功的显示界面
显示后提示按任意键继续,按任意键后选择“0”结束程序,如图:
图15结束程序的显示界面
4设计体会
通过这次课程设计使我感觉到C语言的用途,体现了C语言的强大功能,利用循环查找数组中某个数据,对其进行显示,删除,读入和写入文档等操作。
也使我了解到我有很多的不足,在程序调试的时候常常会因为几个错误而弄得心烦,这说明我对知识的掌握还不够牢,在课程设计过程中也暴露出了我的诸多弊端,也遇到各种各样的困难,通过与同学间的探讨,查阅资料解决困难,增强了自己的自学能力.这次课程设计给了我一个锻炼自己,强化专业知识的机会,借这次课程设计的机会我会认真的加以改正,为以后的学习打下坚实的基础。
参考文献
[1]刘振安等.C程序设计课程设计[M].北京:
机械工业出版社,2004.6:
100页-120页
[2]鲁沐浴.C语言最新编程技巧200例[M].北京:
电子工业出版社,1997.1:
20页-40页
[3]王敬华,林萍,陈静.C语言程序设计教程[M].北京:
清华大学出版社,200510:
184
[4]鲍涌.全国计算机等级考试二级教程-C语言程序设计[M].第二十七版.北京:
高等教育出版社,20069:
187-203
[5]梁翎,李爱齐.C语言程序设计实用技巧与程序实例[M].上海:
上海科普出版社,19965:
126-135
[6]王士元.C高级实用程序设计[M].北京:
清华大学出版社,1996.6:
60页-80页
[7]陈国章.TurboC程序设计技巧与应用实例[M].天津:
天津科学技术出版社,1995.5:
50页-60页