C语言课程设计说明书正文范本标准.docx
《C语言课程设计说明书正文范本标准.docx》由会员分享,可在线阅读,更多相关《C语言课程设计说明书正文范本标准.docx(26页珍藏版)》请在冰豆网上搜索。
C语言课程设计说明书正文范本标准
山西工程技术学院
《C语言程序设计》
课程设计说明书
姓名张雅男
学号150721035
班级15级计应1班
指导老师刘红梅
2016年1月6日
摘要------------------------------------------------------2
1引言------------------------------------------------------3
1.1设计目的------------------------------------------------3
1.2设计要求------------------------------------------------3
2系统分析-------------------------------------------------4
2.1功能需求------------------------------------------------4
2.2数据需求------------------------------------------------5
2.3程序所需函数--------------------------------------------5
3详细设计与实现--------------------------------------------6
3.1功能模块的设计与实现------------------------------------6
3.2程序的详细设计过程--------------------------------------7
4系统测试--------------------------------------------------14
4.1设计测试数据--------------------------------------------14
4.2测试结果及分析------------------------------------------14
总结--------------------------------------------------------22
参考文献----------------------------------------------------23
摘要
在现代教学中,学生管理系统的设计非常重要,因为随着教育事业的逐步提升,受教育的学生日渐增多,也就使对其相关信息的管理变得相对复杂。
由于学生信息多样化,而且信息随时变化多,不得不要求我们找出一套既简单又方便完善管理系统来对学生进行管理。
而目前我们自学习过如何使C语言来进行编程,同时运用文件、结构体、指针,而要想完成一个比较复杂的编程,就必须使用各种函数才能发完成,,所以学习好C语言非常重要。
第1章引言
以前的操作系统等系统软件主要是由汇编语言编写的(包括UNIX操作系统在内)。
由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。
为了提高可读性和可移植性,最好改用高级语言,但一般高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如,对内存地址的操作、位操作等)。
人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。
于是,C语言就在这种情况下应运而生了。
1.1设计目的
考察我们对结构体,指针,文件的操作,以及C语言算法的掌握。
从而让我们把书上学习到的东西与实际情况联系起来,让我们对用C语言进行编程有进一步的了解和深刻的认识。
1.2设计要求
要求使用C语言进行编程,并且尽可能学习其他语言来穿插在程序中,使程序进一步简单而使用、方便。
要求在程序中使用结构体,指针,文件等操作,并且能完整显示出其各种功能。
所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。
如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
第2章系统分析
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7和8是对文件的操作,提前准备好数据。
2.1功能需求
关于系统的功能结构图如图2-1所示。
函数
主函数
函数
函数
图2-1系统功能结构图
2.2数据需求
num[10];学号
name[20];姓名
intage;年龄
charsex;性别
charadd[30];地址
charpho[13]电话
2.3程序所需函数
intInput(Studentstud[],intn)/*输入若干条记录*/
voidDisplay(Studentstud[],intn)/*显示所有记录*/
voidSort_by_num(Studentstud[],intn)/*按学号排序*/
intInsert_a_record(Studentstud[],intn)/*插入一条记录*/
intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/
voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/
intAddfromText(Studentstud[],intn)/*从文件中读入数据*/
voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/
voidmain()/*主函数*/
第3章详细设计
3.1功能模块的设计与实现
系统菜单的主要功能:
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)从正文中添加数据到结构体数组中
(8)将所有数据写入文件中
(0)退出程序
在编完程序以后操作如下:
1、进入界面
2、输入选项1,回车;
按提示输入数据:
3、回到主菜单;
输入选项8,回车;
输入文件名:
data.txt,回车;
出现成功提示,则读入文件操作成功。
4、回到主菜单,输入2,回车
每10个暂停显示数据
5、回到主菜单,输入3,回车
出现排序成功信息。
6、回到主菜单,输入4,回车
按提示插入一组数据
7、回到主菜单,输入5,回车
按提示输入姓名,删除数据
出现删除成功的信息
8、回到主菜单,输入6,回车
输入姓名进行查询
9、回到主菜单,输入8,回车
输入result.txt,回车
出现成功写入文件的信息
10、回到主菜单,输入0,回车退出系统
在编程中所需要的函数如下:
voidmain()/*主函数*/可以调用以下的函数
intInput(Studentstud[],intn)/*输入若干条记录*/
voidDisplay(Studentstud[],intn)/*显示所有记录*/
voidSort_by_num(Studentstud[],intn)/*按学号排序*/
intInsert_a_record(Studentstud[],intn)/*插入一条记录*/
intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/
voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/
intAddfromText(Studentstud[],intn)/*从文件中读入数据*/
voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/
3.2程序的详细设计过程
程序开头
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学号*/
charname[20];/*姓名*/
intage;charsex;charadd[30];charpho[13];
}Student;
Studentstu[80];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");/*运行前清屏*/
printf("\t\t****Students'GradeManagementSystem****\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("0.退出程序\n");
printf("\n请选择(0-8):
");
c=getchar();/*读入选择*/
}while(c<'0'||c>'8');
return(c-'0');/*返回选择*/
}
功能1函数:
intInput(Studentstud[],intn)/*输入若干条记录*/
{inti=0;
charsign,x[30];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{printf("\n学生学号:
");/*交互输入*/
scanf("%s",stud[n+i].num);
printf("\n姓名:
");
scanf("%s",stud[n+i].name);
printf("\n年龄:
");scanf("%d",stud[n+i].age);
printf("\n性别:
");scanf("%c",stud[n+i].sex);
printf("\n地址:
");scanf("%s",stud[n+i].add);
printf("\n电话:
");scanf("%s",stud[n+i].pho);
gets(x);/*清除多余的输入*/
printf("\t\t\t还要录入下一个人吗?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
功能2函数:
voidDisplay(Studentstud[],intn)/*显示所有学生信息记录*/
{
inti;
printf("\t\t\t-----------------------------------\n");/*格式头*/
printf("\t\t\t学号姓名年龄性别地址电话\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i{
printf("\t\t\t%-16s%-15s%d%c%-30s%-13s\n",stud[i-1].num,stud[i-1].name,stud[i-1].age,stud[i-1].sex,stud[i-1].add,stud[i-1].pho);
if(i>1&&i%10==0)/*每十个暂停*/
{printf("\t\t\t-----------------------------------\n");/*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
功能3函数:
实现程序的排序功能
voidSort_by_num(Studentstud[],intn)/*按学号排序*/
{inti,j,s,h;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
s=stud[j+1].age;
stud[j+1].age=stud[j].age;
stud[j].age=s;
h=stud[j+1].sex;
stud[j+1].sex=stud[j].sex;
stud[j].sex=h;
strcpy(t,stud[j+1].add);
strcpy(stud[j+1].add,stud[j].add);
strcpy(t,stud[j+1].pho);
strcpy(stud[j+1].pho,stud[j].pho);
}
}
功能4函数:
intInsert_a_record(Studentstud[],intn)/*插入一条记录*/
{charx[10];/*清除多余输入所用*/
printf("\t\t\t学生学号:
");/*交互式输入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\t姓名:
");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\t年龄:
");
scanf("\t\t\t%d",&stud[n].age);
printf("\t\t\t性别:
");
scanf("\t\t\t%c",&stud[n].sex);
printf("\t\t\t地址:
");
scanf("\t\t\t%s",&stud[n].add);
printf("\t\t\t电话:
");
scanf("\t\t\t%s",&stud[n].pho);
gets(x);
n++;
Sort_by_num(stud,n);/*调用排序函数*/
printf("\t\t\t插入成功!
\n");/*返回成功信息*/
return(n);
}
功能5函数:
intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/
{chars[20];
inti=0,j;
printf("\t\t\t请输入要查询学生的姓名:
");/*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!
=0&&iif(i==n)
{printf("\t\t\t此人不存在!
\n");/*返回失败信息*/
return(n);
}
for(j=i;j{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].age=stud[j+1].age;
stud[j].sex=stud[j+1].sex;
strcpy(stud[j].add,stud[j+1].add);
strcpy(stud[j].pho,stud[j+1].pho);
}
printf("\t\t\t此人信息已成功删除!
\n");/*返回成功信息*/
return(n-1);
}
功能6函数:
voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/
{chars[20];
inti=0;
printf("\t\t\t请输入要查询学生的姓名:
");/*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!
=0&&iif(i==n)
{printf("\t\t\t此人不存在!
\n");/*输入失败信息*/
return;
}
printf("\t\t\t学号:
%s\n",stud[i].num);/*输出该学生信息*/
printf("\t\t\t年龄:
%d\n",stud[i].age);
printf("\t\t\t性别:
%c\n",stud[i].sex);
printf("\t\t\t地址:
%s\n",stud[i].add);
printf("\t\t\t电话:
%s\n",stud[i].pho);
}
功能7函数:
intAddfromText(Studentstud[],intn)/*从文件中读入数据*/
{inti=0,num;
FILE*fp;/*定义文件指针*/
charfile[20];/*定义文件名*/
printf("\t\t\t输入文件名:
");
scanf("\t\t\t%s",file);/*输入文件名*/
if((fp=fopen(file,"rb"))==NULL)/*打开文件*/
{printf("\t\t\t无法打开此文件!
\n");/*打开失败信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);/*读入总记录量*/
while(i{
fscanf(fp,"%s%s%d%c%s%s",stud[n+i].num,stud[n+i].name,&stud[n+i].age,stud[n+i].sex,stud[n+i].add,stud[n+i].pho);
i++;
}
n+=num;
fclose(fp);/*关闭文件*/
printf("\t\t\t成功!
\n");
printf("\t\t\t");
system("pause");
return(n);
}
功能8函数:
voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/
{
inti=0;
FILE*fp;/*定义文件指针*/
charfile[20];/*定义文件名*/
printf("\t\t\tWriteRecordstoaTextFile\n");/*输入文件名*/
printf("\t\t\t输入文件名:
");
scanf("\t\t\t%s",file);
if((fp=fopen(file,"w"))==NULL)/*打开文件*/
{
printf("\t\t\t无法打开文件!
\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);/*循环写入数据*/
while(i{
fprintf(fp,"%-16s%-15s%d%c%-30s%-13s\n",stud[i].num,stud[i].name,stud[i].age,stud[i].sex,stud[i].add,stud[i].pho);
i++;
}
fclose(fp);/*关闭文件*/
printf("成功!
\n");/*返回成功信息*/
}
主函数:
voidmain()/*主函数*/
{
intn=0;
for(;;)
{
switch(menu_select())/*选择判断*/
{
case1:
printf("\t\t\t输入学生信息\n");/*输入若干条记录*/
n=Input(stu,n);
break;
case2:
printf("\t\t\t显示所有记录\n");/*显示所有记录*/
Display(stu,n);
break;
case3:
printf("\t\t\t按学号排序\n");/*按学号排序*/
Sort_by_num(stu,n);
printf("\t\t\t");
system("pause");
break;
case4:
printf("\t\t\t插入一条记录\n");/*插入一条记录*/
n=Insert_a_record(stu,n);
printf("\t\t\t");
system("pause");
break;
case5:
printf("\t\t\t按姓名查找,删除一条记录\n");
n=Delete_a_record(stu,n);/*按姓名查找,删除一条记录*/
printf("\t\t\t");
system("pause");
break;
case6:
printf("\t\t\t查找并显示一条记录\n");
Query_a_record(stu,n);/*查找并显示一个记录*/
printf("\t\t\t");
system("pause");
break;
case7:
printf("\t\t\t从正文中添加数据到结构体数组中\n");
n=Addfr