中南大学c语言课程实践报告.docx
《中南大学c语言课程实践报告.docx》由会员分享,可在线阅读,更多相关《中南大学c语言课程实践报告.docx(12页珍藏版)》请在冰豆网上搜索。
![中南大学c语言课程实践报告.docx](https://file1.bdocx.com/fileroot1/2022-12/8/a24c7d19-5f5d-412c-a953-aa282e9b6129/a24c7d19-5f5d-412c-a953-aa282e9b61291.gif)
中南大学c语言课程实践报告
中南大学
C语言程序设计实践报告
题目学生信息管理系统
学生姓名张眼
指导教师刘伟荣
学院信息科学与工程学院
专业班级电气信息1113班
完成时间2012年6月28日星期四
1.设计任务及设计目标
学生信息管理系统是基于系统主菜单的操作来实现学生数据的录入、修改、查询和统计等系统的基本功能。
达到对学生信息的存储、统计、管理的目的。
需要处理的数据如:
班级、学号、姓名等。
实现的功能模块如:
数据的录入、数据的修改、数据的插入、数据的查询和数据的统计等。
在实践过程中熟练掌握C语言的基本知识:
数据类型(整型、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握函数嵌套调用、文件的读写、链表的应用等。
2.总体设计
将整个系统分成若干子模块,
设计流程图如下:
学生信息管理系统
【1】输入学生信息
【2】浏览学生信息
【3】查询学生信息
【4】删除学生信息
【5】修改学生信息
【6】不及格学生列表
【7】学生平均成绩
【8】学生课程信息查询
【0】退出系统
3.详细设计
主函数:
一般比较简单,只提供输入,处理,输出的调用函数,
void main()
{
int z;
printf("\t\t\t +---------------------------+\n");
printf("\t\t\t | 学生信息管理系统欢迎您 |\n");
printf("\t\t\t +---------------------------+\n");
printf("\t\t\t + 设计者:
张眼\n");
printf("\t\t\t + 指导老师:
刘伟荣\n");
printf("重要提示:
为保证您的操作得到保存,请按正常顺序退出系统!
谢谢合作\n");
do
{
printf("\n\t\t\t+++++++++++++++++++++++++++++\n");
printf("\t\t\t|** 菜单 **|\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++\n");
printf("\t\t\t* [1]----录入/插入学生信息 *\n");
printf("\t\t\t* [2]----浏览学生信息 *\n");
printf("\t\t\t* [3]----查询学生信息 *\n");
printf("\t\t\t* [4]----删除学生信息 *\n");
printf("\t\t\t* [5]----修改学生信息 *\n");
printf("\t\t\t* [6]----不及格学生列表 *\n");
printf("\t\t\t* [7]----成绩信息查询 *\n");
printf("\t\t\t* [8]----平均成绩 *\n");
printf("\t\t\t* [0]----退出系统 *\n");
printf("\t\t\t********************************\n");
printf("请输入您的选择:
");
scanf("%d", &z);
switch(z)
{
case 0 :
tc();break;
case 1 :
lr();break;
case 2 :
ll();break;
case 3 :
cx();break;
case 4 :
sc();break;
case 5 :
xg();break;
case 6 :
bj();break;
case 7 :
kc();break;
case 8 :
pj();break;
default:
printf("\n无效选项!
");
}
}
while(z!
= 0);
}
输入模块:
输入部分包括学生的姓名,学号等基本信息以及学生的大学物理,英语,微积和信号的成绩,可以通过函数voidlr()实现此功能。
void lr()/*录入函数*/
{
int y;
if(n==0)
p=stu;
do
{
printf("--------------------\n");
printf("请输入学生的学号:
");
scanf("%ld",&p->num);
printf("请输入学生的姓名:
");
scanf("%s",p->name);
printf("请输入学生的年龄:
");
scanf("%d",&p->age);
printf("请输入学生的性别:
");
scanf("%s",p->sex);
printf("请输入学生的班级:
");
scanf("%d",&p->clas);
printf("请输入大物考试成绩:
");
scanf("%d",&p->pt);
printf("请输入大物平时成绩:
");
scanf("%d",&p->ps);
printf("请输入英语考试成绩:
");
scanf("%d",&p->et);
printf("请输入英语平时成绩:
");
scanf("%d",&p->es);
printf("请输入微积分考试成绩:
");
scanf("%d",&p->ct);
printf("请输入微积分平时成绩:
");
scanf("%d",&p->cs);
printf("请输入信号考试成绩:
");
scanf("%d",&p->xt);
printf("请输入信号平时成绩:
");
scanf("%d",&p->xe);
n++;
p++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:
");
scanf("%d",&y);
}
while(y==1);
printf("提示:
输入完毕!
你一共输入%d个\n",n);
}
查询模块:
该模块是通过输入的学生信息(学号或姓名)来查找学生的所有信息并且显示在屏幕上。
通过函数void cx()来实现。
void cx()/*查询函数*/
{
int c;
int w,i,j=0;
char name[20];
if(n!
=0)
{
do{ printf("\n");
printf("+--------------------+\n");
printf("| 按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入选择:
");
scanf("%d", &c);
switch(c)
{
case 0:
break;
case 1:
printf("请输入学生的学号;");
scanf("%ld", &w);
printf("\n");
for(i=0;i if(stu[i].num==w)
{
printf("\n学号\t姓名\t年龄\t性别\t班级\n");
printf("%ld\t%s\t%d\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].clas);
j=1;
}
if(j==0)
printf("提示:
没有该学生记录,请核对!
");
break;
case 2:
printf("请输入学生的姓名:
");
scanf("%s", name);
printf("\n");
for(i=0;i if(strcmp(name,stu[i].name)==0)
{
printf("\n学号\t姓名\t年龄\t性别\t班级\n");
j=1;
printf("%ld\t%s\t%d\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].clas);
}
if(j==0)
printf("提示:
没有该学生记录,请核对!
");
break;
default:
printf("\n提示:
无效选项!
");
break;
}
}while(c!
= 0);
}else printf("提示:
无学生数据,请输入数据!
");
}
删除模块:
该模块通过输入要删除的学生学号,通过学号查找并删除记录。
如果没有学生信息输出提示:
无学生数据,请输入数据!
通过函数void sc()实现
void sc()/*删除函数*/
{
long int num;
int i,j,e;
if(n!
=0)
{
printf("学号\t姓名\t年龄\t性别\t班级\n");
printf("-----------------------------------------------------\n");
for(i=0;i printf("%ld\t%s\t%d\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].clas);
printf("请输入您要删除的学生的学号:
");
scanf("%ld", &num);
printf("\n");
for(i=0;i if(num==stu[i].num)
j=i;
if(j!
=(n-1))
{
for(e=j;e<(n-1);e++)
{
stu[e].num=stu[e+1].num;
strcpy(stu[e].name,stu[e+1].name);
strcpy(stu[e].sex,stu[e+1].sex);
stu[e].age=stu[e+1].age;
stu[e].clas=stu[e+1].clas;
stu[e].pt=stu[e+1].pt;
stu[e].ps=stu[e+1].ps;
stu[e].et=stu[e+1].et;
stu[e].es=stu[e+1].es;
stu[e].ct=stu[e+1].ct;
stu[e].cs=stu[e+1].cs;}
n--;
}
else n--; printf("提示:
删除完毕!
");
}else printf("提示:
无学生数据,请输入数据!
");
}
修改信息模块:
该模块通过输入要修改的学生学号查找学生信息,并显示用户修改的内容信息,供用户选择,根据选项进行修改。
通过函数void xg()实现。
void xg()/*修改函数*/
{
long int num;
int i,j,c;
if(n!
=0)
{
printf("请输入您要修改的学生的学号:
");
scanf("%ld", &num);
printf("\n");
for(i=0;i if(stu[i].num==num)
j=i;
do{
printf("请选择您要修改的学生的信息内容:
\n");
printf("+----------------------+\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("| 英语平时成绩 请按 9 |\n");
printf("| 微积分考试成绩 请按10 |\n");
printf("| 微积分平时成绩 请按 11 |\n");
printf("| 信号考试成绩 请按12 |\n");
printf("| 信号平时成绩 请按13 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:
");
scanf("%d", &c);
printf("\n");
switch(c)
{
case 0:
break;
case 1:
printf("请输入新姓名:
");
scanf("%s",stu[j].name);
break;
case 2:
printf("请输入新年龄:
");
scanf("%d",&stu[j].age);
break;
case 3:
printf("请输入新性别:
");
scanf("%s",stu[j].sex);
break;
case 4:
printf("请输入新学号:
");
scanf("%ld",&stu[j].num);
break;
case 5:
printf("请输入新班级:
");
scanf("%d",&stu[j].clas);
break;
case 6:
printf("请输入大物考试成绩:
");
scanf("%d",&stu[j].pt);
break;
case 7:
printf("请输入大物平时成绩:
");
scanf("%d",&stu[j].ps);
break;
case 8:
printf("请输入英语考试成绩:
");
scanf("%d",&stu[j].et);
break;
case 9:
printf("请输入英语平时成绩:
");
scanf("%d",&stu[j].es);
break;
case 10:
printf("请输入微积分考试成绩:
");
scanf("%d",&stu[j].ct);
break;
case 11:
printf("请输入微积分平时成绩:
");
scanf("%d",&stu[j].cs);
case 12:
printf("请输入信号考试成绩:
");
scanf("%d",&stu[j].xt);
case 13:
printf("请输入信号考试成绩:
");
scanf("%d",&stu[j].xe);
break;
default:
printf("\n无效选项!
");
break;
}
}while(c!
= 0);
}else printf("提示:
无学生数据,请输入数据!
");
}
不及格学生计算模块:
该模块通过对已经输入的学生数据进行处理,当四门功课中有一门成绩小于60,就输出此学生的信息及不及格科目的成绩。
此功能通过函数void bj()实现。
void bj()/*不及格学生列表函数*/
{
int i,j;
char a[4][10]={"大学物理","大学英语"," 微积分","信号"};
float l[4];
if(n!
=0)
{ printf("\n学号\t姓名\t课程\t\t成绩\n");
for(i=0;i{ l[0]=stu[i].pt*0.7+stu[i].ps*0.3;
l[1]=stu[i].et*0.7+stu[i].es*0.3;
l[2]=stu[i].ct*0.7+stu[i].cs*0.3;
l[3]=stu[i].xt*0.7+stu[i].xe*0.3;
for(j=0;j<4;j++)
if(l[j]<60.0)
{printf("%ld\t%s\t%s\t%3.1f\n",stu[i].num,stu[i].name,a[j],l[j]);
}
}
}
else
printf("提示:
无学生数据,请输入数据!
");
}
平均成绩计算模块:
该模块通过对已经输入的的学生成绩进行处理,计算出每位同学的平均成绩并以平均成绩为最终成绩进行从高到低的排名,排名通过选择法实现,该功能通过函数void pj()实现。
id pj()/*平均成绩计算函数*/
{
int i,j;
struct student temp;
float l[4],ave[100],m;
if(n>1)
{
for(i=0;i<(n-1);i++)
for(j=i+1;j{
ave[i]=(stu[i].pt*0.7+stu[i].ps*0.3+stu[i].et*0.7+stu[i].es*0.3+stu[i].ct*0.7+stu[i].cs*0.3+stu[i].xt*0.7+stu[i].xe*0.3)/4;
ave[j]=(stu[j].pt*0.7+stu[j].ps*0.3+stu[j].et*0.7+stu[j].es*0.3+stu[j].ct*0.7+stu[j].cs*0.3+stu[i].xt*0.7+stu[i].xe*0.3)/4;
if(ave[i]{
m=ave[j];temp=stu[j];
ave[j]=ave[i];stu[j]=stu[i];
ave[i]=m;stu[i]=temp;
}}
printf("学号\t姓名\t年龄\t性别\t班级\t平均成绩\n");
printf("----------------------------------------------------------------------------\n");
for(i=0;iprintf("%ld\t%s\t%d\t%s\t%d\t%3.1f\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].clas,ave[i]);
}
else if(n=0)
printf("提示:
无学生数据,请输入数据!
");
else
{ave[0]=(stu[0].pt*0.7+stu[0].ps*0.3+stu[0].et*0.7+stu[0].es*0.3+stu[0].ct*0.7+stu[0].cs*0.3+stu[0].xt*0.7+stu[0].xe*0.3)/4;
printf("学号\t姓名\t年龄\t性别\t班级\t平均成绩\n");
printf("---------------------------------------------------------------