《C语言程序的设计》大作业.docx
《《C语言程序的设计》大作业.docx》由会员分享,可在线阅读,更多相关《《C语言程序的设计》大作业.docx(39页珍藏版)》请在冰点文库上搜索。
《C语言程序的设计》大作业
南昌大学软件学院
C语言程序设计工程实训
大
作
业
班级:
09软件技术
(2)班
学号:
8001509107
姓名:
吴承增
指导老师:
危建国
2010年12月10日
系统说明书
1.问题描述:
该程序包内容包括以下的模块,均用子函数完成:
(1)主菜单
(2)输入若干条记录并保存文件(指学生的信息)
(3)学生信息录入、修改、删除、查询、存储。
(4)学生信息的浏览及排序(冒泡排序算法)。
(5)学生成绩的录入、修改。
(6)统计及格和优秀人数
(7)退出系统
2.程序设计和程序流程图:
解决方案:
主函数流程图:
各部分功能的流程图:
录入学生成绩流程图:
统计功能流程图如图3所示:
图3统计模块流程图
冒泡排序流程图:
排序学生信息流程图:
删除学生成绩信息流程图:
3.系统的基本功能(主要数据和函数功能描述):
charxh[15];//以字符串数组形式存储学生学号
charname[25]//以字符串数组形式存储学生姓名
charsex[5];//性别floatsxcj;//数学成绩
floatyycj;//英语成绩floatCyycj;//C语言成绩
floatave;//平均成绩floatsum;//总成绩
#defineN4//宏定义学生#defineMAX60//学生最大个数
intnCOUNT=0;//记录当前学生个数structstudent//定义结构体学生
intScoreNew()//录入学生成绩intaverage()//求平均数
intxsxscj()//显示输入学生信息、将学生打印到屏幕上
intxsxsxx()//显示学生信息intxhcjpx()//按学生学号排序学生信息intsxcjpx()按数学成绩排序学生信息intyycjpx()按英语成绩排序学生信息
intCyypx()//按C语言成绩排序学生信息intzcjpx()按总成绩排序学生信息
intpxxsxx()//排序学生信息intaxhcx()//按学号查询
intaxmcx()//按姓名查询intSearchStud()//查询学生成绩信息
intzjxsxx()//增加学生信息intxgxsxx()//修改学生信息
intscxsxx()//删除学生信息intgxxscj()//更新学生信息
inttjxscj()//统计学生成绩intsave()//保存到文件
((fp=fopen("stu_list.txt","wb"))==NULL)//以只读方式打开文件stu_list.txt
(fwrite(&str[i],sizeof(structstudent),1,fp)!
=1)//创建文件并以二进制形式打开
intxswj()//显示文件信息
intmain()//主函数mainmemu
4.拟采用开发平台:
VisualC++,BorlandC++等。
实验分析与结论:
成绩录入函数按次序录入系统中现存所有学生的所有科目上,每录入一个学生的成绩,首先显示其姓名和学号,然后依次输入英语、高数和C语言成绩。
各科成绩初始化为0.
修改学生信息函数调用函数对需要修改信息的学生进行查找,找到后返回该学生所对应的下标值n,将用户录入的新值存入数组中.
删除学生信息函数调用SeachStud()函数对需要删除信息的学生进行查找,找到后返回该学生所对应的下标值n,用数组中第n个后面的元素依次向前覆盖,学生总数减1,即nCount-1。
需要强调的是,数组是静态存储分配方式,在声明时,系统已经给数组分配了其标注的全部内在空间,而且直到本段代码运行结束都不会改变。
所以,不可能将数组中不用的元素所占用的空间释放掉。
本函数从后向前覆盖,删除学生信息,由于每个数组的读写的循环次数都不是以其长度为准的。
而是以nCount值的大小来进行的,因此nCount—可以保证不会读到最后一个无效数据。
收获与体会:
学生成绩档案管理系统具备了数据的输入和成绩分类分析的功能。
它能进行单独的一次数据处理。
学习过循环结构以后,结合所学的知识点,增加系统重复处理数据的能力,既检验对知识的实际应用能力,又把系统的功能进一步充实。
刚开始很难下手,请教同学和老师后慢慢入手。
渐渐地写点程序。
本次对学生成绩档案管理系统编写程序让我更加熟悉宏定义,函数调用,数组,排序等运用以及switch语句,if语句,while语句。
这次编程让我对C语言的综合编程能力的掌握,培养学生的逻辑思维能力,最终达到学生能完全独立编制、调试程序的能力。
程序代码:
/*
purpose:
结构体输出
author:
凌风叶子Wuchengzeng
created:
2010/11/1111:
11:
11
*/
#include
#include
#include
#include
#include
#include
//#include
#defineN4//宏定义学生
#defineMAX60//学生最大个数
intnCOUNT=0;//记录当前学生个数
intp;
//intsave();
//intduquwj();
//intxiugaiwj();
//charcStudNo[60][13]={"8001509060","8001509061"};
//charcStudName[80][13]={"承增","叶子"};
structstudent
{
charxh[15];//学号
charname[25];//姓名
charsex[5];//性别
floatsxcj;//数学成绩
floatyycj;//英语成绩
floatCyycj;//C语言成绩
floatave;//平均成绩
floatsum;//总成绩
}
str[MAX];
//structstudent[MAX];
intScoreNew()//录入学生成绩
{
intaverage();//求平均数
inti=0;
charch;
system("cls");
do{
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("\t\t================================================\n");
printf("\t\t--------------录入学生信息---------------\n");
printf("\t\t================================================\n");
printf("\t\t请录入第%d学生信息\n",i+1);
printf("\n\t\t输入学生学号:
");
scanf("%s",str[i].xh);
fflush(stdin);
printf("\n\t\t输入学生姓名:
");
fflush(stdin);
scanf("%s",str[i].name);
printf("\n\t\t输入学生性别:
");
fflush(stdin);
scanf("%s",str[i].sex);
printf("\n\t\t输入学生数学成绩:
");
fflush(stdin);
scanf("%f",&str[i].sxcj);
printf("\n\t\t输入学生英语成绩:
");
fflush(stdin);
scanf("%f",&str[i].yycj);
printf("\n\t\t输入学生C语言成绩:
");
fflush(stdin);
scanf("%f",&str[i].Cyycj);
i++;
nCOUNT=i;
printf("\n\t\t是否继续输入?
(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!
='n'&&ch!
='N');
average();
printf("\n");
system("cls");
return0;
}
intaverage()//求平均数
{
inti;
for(i=0;i{
str[i].sum=str[i].sxcj+str[i].yycj+str[i].Cyycj;
str[i].ave=str[i].sum/3;
}
return0;
}
//将学生打印到屏幕上
intxsxscj()//显示输入学生信息
{
inti;
average();
system("cls");
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("\t\t================================================\n");
printf("\t\t------------显示学生成绩信息-----------\n");
printf("\t\t================================================\n");
printf("----------------------------------------------------------------------------\n");
printf("学号姓名性别数学英语C语言总成绩平均成绩\n");
printf("----------------------------------------------------------------------------\n");
for(i=0;i{
printf("%s",str[i].xh);
printf("\t%s",str[i].name);
printf("\t%s",str[i].sex);
printf("\t%.1f",str[i].sxcj);
printf("\t%.1f",str[i].yycj);
printf("\t%.1f",str[i].Cyycj);
printf("\t%.1f",str[i].sum);
printf("\t%.1f\n",str[i].ave);
}
fflush(stdin);
system("pause");
system("cls");
return0;
}
intxsxsxx()//显示学生信息
{
intxswj();
intq;
system("cls");
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("\t\t================================================\n");
printf("\t\t--------------显示学生信息---------------\n");
printf("\t\t================================================\n");
printf("\t\t--------------显示输入学生信息---------------1\n");
printf("\t\t--------------显示文件学生信息---------------2\n");
printf("\t\t--------------按0返回!
--------------00\n");
printf("\t\t请选择功能键:
");
scanf("%d",&q);
switch(q){
case0:
printf("\nexit\n");
q=0;
break;
case1:
xsxscj();break;
case2:
xswj();break;
default:
printf("\t\t输入错误!
\n");
system("pause");
break;}
system("cls");
return0;
}
intxhcjpx()//按学生学号排序学生信息
{
structstudentt;
inti,j;
average();
for(j=0;jfor(i=0;i{
if(str[i].sxcj{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
printf("InputENTERagain!
\n");
system("pause");
xsxscj();
return0;
}
intsxcjpx()//按数学成绩排序学生信息
{
structstudentt;
inti,j;
average();
for(j=0;jfor(i=0;i{
if(str[i].sxcj{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
printf("InputENTERagain!
\n");
system("pause");
xsxscj();
return0;
}
intyycjpx()//按英语成绩排序学生信息
{
structstudentt;
inti,j;
average();
for(j=0;jfor(i=0;i{
if(str[i].yycj{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
printf("InputENTERagain!
\n");
system("pause");
xsxscj();
return0;
}
intCyypx()//按C语言成绩排序学生信息
{
structstudentt;
inti,j;
average();
for(j=0;jfor(i=0;i{
if(str[i].Cyycj{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
printf("InputENTERagain!
\n");
system("pause");
xsxscj();
return0;
}
intzcjpx()//按总成绩排序学生信息
{
structstudentt;
inti,j;
average();
for(j=0;jfor(i=0;i{
if(str[i].sum{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
printf("InputENTERagain!
\n");
system("pause");
xsxscj();
return0;
}
intpxxsxx()//排序学生信息
{
intq;
system("cls");
while(q){
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("\t\t================================================\n");
printf("\t\t----------------排序学生信息--------------\n");
printf("\t\t================================================\n");
printf("\t\t---------------按学生学号排序-----------1\n");
printf("\t\t---------------按数学成绩排序-----------2\n");
printf("\t\t---------------按英语成绩排序-----------3\n");
printf("\t\t---------------按C语言成绩排序-----------4\n");
printf("\t\t----------------按总成绩排序--------------5\n");
printf("\t\t-------------------按0返回!
---------------00\n");
printf("\t\t================================================\n");
printf("\t\t请选择功能键:
");
scanf("%d",&q);
switch(q){
case00:
printf("\nexit\n");
q=0;
break;
case1:
xhcjpx();break;
case2:
sxcjpx();break;
case3:
yycjpx();break;
case4:
Cyypx();break;
case5:
zcjpx();break;
default:
printf("\t\t输入错误!
\n");
system("pause");
break;}
system("cls");
}
return0;
}
intaxhcx()//按学号查询
{
inti;
charxuehao[12];
average();
printf("\t\t请输入学生学号:
");
fflush(stdin);
scanf("%s",xuehao);
for(i=0;i<=nCOUNT;i++)
{
if(!
strcmp(str[i].xh,xuehao))
{
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("----------------------------------------------------------------------------\n");
printf("学号姓名性别数学英语C语言总成绩平均成绩\n");
printf("----------------------------------------------------------------------------\n");
printf("%s",str[i].xh);
printf("%s",str[i].name);
printf("%s",str[i].sex);
printf("%.1f",str[i].sxcj);
printf("%.1f",str[i].yycj);
printf("%.1f",str[i].Cyycj);
printf("%.1f",str[i].sum);
printf("%.1f\n",str[i].ave);
system("pause");
returni;
}
}
printf("\n\t\t此学生不存在或输入错误!
\n");
fflush(stdin);
system("pause");
return0;
}
intaxmcx()//按姓名查询
{
inti;
charstre[20];
average();
printf("\t\t请输入学生姓名:
");
fflush(stdin);
gets(stre);
for(i=0;i{
if(!
strcmp(str[i].name,stre))
{
printf("\t\t设计者:
吴承增班级:
软件技术092班\n");
printf("-----------------------------------------------------------------------------\n");
printf("学号姓名性别数学英语C语言总成绩平均成绩\n");
printf("-----------------------------------------------------------------------------\n");
printf("%s",str[i].xh);
printf("%s",str[i].name);
printf("%s",str[i].sex);
printf("%.1f",str[i].sxcj);
printf("%.1f",str[i].yycj);
printf("%.1f",str[i].Cyycj);
printf("%.1f",str[i].sum);
printf("%.1f\n",str[i].ave);
system("pause");
returni;
}
}
printf("\n\t\t此学生不存在或输入错误!
\n");
fflush(stdin);
system("pause");
return0;
}
intSearchStud()//查询学生成绩信息
{
intq;
system("cls");
while(q){
printf("\