C程大作业.docx
《C程大作业.docx》由会员分享,可在线阅读,更多相关《C程大作业.docx(22页珍藏版)》请在冰点文库上搜索。
C程大作业
学年论文
(课程论文、课程设计)
题 目:
学生信息管理系统
作 者:
所在学院:
信息科学与工程学院
专业年级:
指导教师:
职 称:
2010年1月2日
大作业题目:
学生成绩管理系统
大作业目的:
(1)进一步熟悉C的语法知识和VC++环境;
(2)熟练掌握一些常用算法,如排序、查找等;
(3)熟悉C程序的编写与调试;
(4)增加学生对C语言的兴趣
大作业要求:
设计一学生成绩管理系统,要求实现数据的录入、插入、删除、修改、查找、查询、排序、统计、显示等功能。
(1)数据结构:
学号、姓名、性别、年龄、3门课程成绩、总分、平均分。
(2)为用户提供友好的菜单选择界面,用户通过键入数字或者字母实现功能选择,进入相应的功能。
(3)功能:
a)数据录入——按顺序录入学生成绩
b)删除记录
c)修改记录
d)查询记录——按学号等进行简单查询
e)计算总分和平均分
f)排序:
可以按学号、总分、平均分显示学生信息
g)学生信息能以文件的形式保存,或读取
h)页面以汉字形式输出。
i)插入学生信息
j)统计学生分数
k)退出
(4)对系统常量要求用符号常量进行规范,对于常用的功能和算法如排序要求做成自己的库函数,并使用头文件的方式实现分离编译。
(5)要求提供算法分析、程序流程图,对实验结果的处理包括程序调试结果、结论及改进方案、实习体会等内容。
三.大作业总体设计及源代码
1、总体设计
2、源代码
#include
#include/*定义数组*/
#defineM3
structstudent/*结构体*/
{
intxh;//学生学号
charxm[20];/*数组*/
charxb;
intnl;
intcj[M];//成绩
intzf,pjf;/*总分与平均分*/
};
structstudents[20];/*学生数组*/
intn=0;
voidcalc(i)
{
intsum=0,j;
for(j=0;jsum=sum+s[i].cj[j];
s[i].zf=sum;
s[i].pjf=sum/M;
}
voidinput()/*插入*/
{
intlocate(intxh);
intxh,i,sum;
printf("请输入学号:
");
scanf("%12d",&xh);
getchar();
while(xh!
=0)
{
if(locate(xh)!
=-1)
{
printf("学号已存在!
!
!
\n\n");
gotoabc;
}
s[n].xh=xh;
printf("姓名:
");
gets(s[n].xm);
printf("性别:
");
scanf("%c",&s[n].xb);
printf("年龄:
");
scanf("%d",&s[n].nl);
sum=0;
printf("3门成绩,成绩范围0--150:
");
for(i=0;iscanf("%d",&s[n].cj[i]);
if(s[n].cj[i]<0||s[n].cj[i]>150)
{
printf("成绩超出范围");
return;
}
calc(n);
n++;
abc:
printf("\n请输入学号:
");
scanf("%d",&xh);
getchar();
}
}
voidinsert()/*插入*/
{
intlocate(intxh);
inti,j,t;
intxh;
printf("输入插入位置(0---%d):
",n);
scanf("%d",&i);
if(i<0||i>n)
{
printf("序号超出范围!
!
!
\n",n);
return;
}
for(j=n-1;j>=i;j--)
{
s[j+1].xh=s[j].xh;
strcpy(s[j+1].xm,s[j].xm);
s[j+1].xb=s[j].xb;
s[j+1].nl=s[j].nl;
s[j+1].cj[0]=s[j].cj[0];
s[j+1].cj[1]=s[j].cj[1];
s[j+1].cj[2]=s[j].cj[2];
}
printf("请输入学号:
");
scanf("%d",&s[i].xh);getchar();
printf("\n");
printf("请输入姓名:
");
gets(s[i].xm);
printf("请输入性别:
");
scanf("%c",&s[i].xb);
printf("请输入年龄:
");
scanf("%d",&s[i].nl);
printf("请输入3科成绩,成绩范围0---150:
");
for(j=0;j{scanf("%d",&s[i].cj[j]);
if(s[i].cj[j]>150)
{printf("分数超出范围,请核对后再输入!
!
!
!
!
\n");
return;
}
}
calc(i);
n=n+1;
}
//删除
voiddel()
{
intxh,i,j;
intlocate(intxh);
printf("输入学号:
");
scanf("%d",&xh);
i=locate(xh);
if(i!
=-1)
{
for(j=i+1;j{
s[j-1].xh=s[j].xh;
strcpy(s[j-1].xm,s[j].xm);
s[j-1].xb=s[j].xb;
s[j-1].nl=s[j].nl;
s[j-1].cj[0]=s[j].cj[0];
s[j-1].cj[1]=s[j].cj[1];
s[j-1].cj[2]=s[j].cj[2];
}
n=n-1;
}
else
printf("无法删除!
!
!
\n");
}
intlocate(intxh)
{
inti,j;
for(i=0;iif(s[i].xh==xh)
{
printf("%11d",s[i].xh);
printf("%20s",s[i].xm);
printf("%3c",s[i].xb);
printf("%5d",s[i].nl);
for(j=0;jprintf("%5d",s[i].cj[j]);
printf("%5d",s[i].zf);
printf("%5d",s[i].pjf);
printf("\n");
returni;
}
printf("学号不存在,请输入学生信息!
!
!
\n");
return-1;
}
//显示
voiddisplay()
{
inti,j;
printf("----------------学生成绩统计---------------\n");
printf("学号姓名性别年龄成绩1成绩2成绩3总分平均分\n");
for(i=0;i{
printf("%5d",s[i].xh);
printf("%20s",s[i].xm);
printf("%3c",s[i].xb);
printf("%5d",s[i].nl);
for(j=0;jprintf("%5d",s[i].cj[j]);
printf("%5d",s[i].zf);
printf("%5d",s[i].pjf);
printf("\n");
printf("-----------------------------------------------------\n");
}
}
voidsave()
{
FILE*fp;
inti;
charfname[20];
printf("输入文件名:
");
gets(fname);
fp=fopen(fname,"wb");
if(fp==NULL)
{
printf("文件打开错误!
!
!
\n");
return;
}
for(i=0;iif(fwrite(&s[i],sizeof(structstudent),1,fp)!
=1)
{
printf("文件写入错误!
\n");
return;
}
printf("文件保存成功!
\n");
fclose(fp);
}
voidswap(inta,intb)
{
intt;
charxm[20];
charxb;
t=s[a].xh;s[a].xh=s[b].xh;s[b].xh=t;
strcpy(xm,s[a].xm);strcpy(s[a].xm,s[b].xm);strcpy(s[b].xm,xm);
xb=s[a].xb;s[a].xb=s[b].xb;s[b].xb=xb;
t=s[a].nl;s[a].nl=s[b].nl;s[b].nl=t;
t=s[a].cj[0];s[a].cj[0]=s[b].cj[0];s[b].cj[0]=t;
t=s[a].cj[1];s[a].cj[1]=s[b].cj[1];s[b].cj[1]=t;
t=s[a].cj[2];s[a].cj[2]=s[b].cj[2];s[b].cj[2]=t;
t=s[a].zf;s[a].zf=s[b].zf;s[b].zf=t;
t=s[a].pjf;s[a].pjf=s[b].pjf;s[b].pjf=t;
}
//冒泡排序法
voidsortbyxh()
{
inti,j;
for(i=0;i{
for(j=0;jif(s[j].xh>s[j+1].xh)
swap(j,j+1);
}
printf("顺序已经排好!
\n");
}
voidsortbyzf()
{
inti,j;
for(i=0;i{
for(j=0;jif(s[j].zf>s[j+1].zf)//相临的两个数比较
swap(j,j+1);
}
printf("顺序已经排好!
\n");
}
voidsortbypjf()
{
inti,j;
for(i=0;i{
for(j=0;jif(s[j].pjf>s[j+1].pjf)
swap(j,j+1);
}
printf("顺序已经排好!
\n");
}
voidsort()
{
inti;
printf("1按学生学号排序\n");
printf("2按学生总分排序\n");
printf("3按平均分数排序\n");
printf("\n");
printf("请输入选项:
");
scanf("%d",&i);
switch(i)
{
case1:
sortbyxh();break;
case2:
sortbyzf();break;
case3:
sortbypjf();break;
}
}
//下载文件
voidload()
{
FILE*fp;
inti;
charfname[20];
printf("输入文件名:
");
gets(fname);
fp=fopen(fname,"rb");
if(fp==NULL)
{
printf("文件打开错误!
\n");
return;
}
//从文件中载入学生信息
n=0;
while(!
feof(fp))
{
if(fread(&s[n],sizeof(structstudent),1,fp)!
=1)
{break;
}
n++;
}
printf("文件成功载入!
\n");
fclose(fp);
}
//统计数据
voidstas()
{
inta,b,c,d,e;
inti;
a=b=c=d=e=0;
for(i=0;i{
switch(s[i].pjf/10)
{
case0:
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
a++;break;
case9:
case10:
b++;break;
case11:
c++;break;
case12:
d++;break;
case13:
case14:
e++;break;
case15:
;
}
}
printf("<80%d%5.2f%%\n",a,a*100.0/n);
printf("90<-->110%d%5.2f%%\n",b,b*100.0/n);
printf("110<-->120%d%5.2f%%\n",c,c*100.0/n);
printf("120<-->130%d%5.2f%%\n",d,d*100.0/n);
printf("130<-->150%d%5.2f%%\n",e,e*100.0/n);
}
voidedit()//编辑学生信息板块
{
intlocate(intxh);
intxh;
inti;
printf("请输入学号:
\n");
scanf("%12d",&xh);
getchar();
i=locate(xh);
if(i==-1)
{
printf("学号不存在!
\n");
return;
}
printf("请输入3门课的成绩:
");
scanf("%d%d%d",&s[i].cj[0],&s[i].cj[1],&s[i].cj[2]);
calc(i);
printf("修改成功!
\n");
}
voidmain()
{
intc=1;
while(c!
=0)
{
printf("**********************\n");
printf("*学生成绩管理系统菜单*\n");
printf("**********************\n");
printf("
(1)输入*
(2)插入\n");
printf("(3)删除*(4)编辑\n");
printf("(5)查找*(6)排序\n");
printf("(7)显示*(8)保存\n");
printf("(9)载入*(10)统计\n");
printf("(0)退出*\n");
printf("**********************\n");
printf("输入选项:
");
scanf("%d",&c);getchar();
//条件选择语句
switch(c)
{
case1:
input();break;
case2:
insert();break;
case3:
del();break;
case4:
edit();break;
case5:
{intxh;
printf("输入学号:
");
scanf("%12d",&xh);
locate(xh);break;
}
case6:
sort();break;
case7:
display();break;
case8:
save();break;
case9:
load();break;
case10:
stas();
case0:
break;
}
}
}
3、调试结果
4总结.(如需要,可附结论及改进方案、实习体会)
新疆大学课程论文(设计)、学年论文评分表
题目
作者
专业年级
指导教师
指导教师评语及
评分建议
指导教师:
年月日
院
(部)
或
教
研
室
意
见
学院或教研室主任:
年月日