C程序设计基础.docx
- 文档编号:29845665
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:22
- 大小:159.13KB
C程序设计基础.docx
《C程序设计基础.docx》由会员分享,可在线阅读,更多相关《C程序设计基础.docx(22页珍藏版)》请在冰豆网上搜索。
C程序设计基础
程序设计基础
(一)大作业设计报告
班级 计科
(2)班 学号201013137183姓名王于铭
一、题目要求
设计一个程序,实现学生成绩管理功能。
基本功能:
1)提供菜单式的用户界面
2)输入课程名称
3)输入某门课程的成绩
4)增加或删除学生记录
5)输入姓名或学号,查找某个学生的成绩
6)对学生成绩按照姓名、学号或某门成绩排序
7)计算某个学生的平均绩点
8)统计某门课程成绩在100-90,89-80,79-70,69-60,60以下各分数段的人数并显示
其它:
全部数据可保存到文件
二、设计方案
基本思路:
三、具体功能实现
1、输入初始的学生信息:
输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数voidinput(STUDENT*data,int*len)来实现此操作。
2、成绩输出模块:
输出学生的信息以及成绩voidoutput(STUDENT*data,intlen):
通过学生的姓名来查看学生的相关成绩,
3、成绩查询模块:
可用voidfind(STUDENT*data,intlen) 来实现。
找到就输出此学生全部信息。
4、删除模块:
用函数voiddelete_item(STUDENT*data,int*len)来实现
5、排序模块:
用函数voidsort(STUDENT*data,intlen)来实现
6、统计功能能:
用函数voidstat(STUDENT*data,intlen)来实现
7、退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
四、源代码
#include
#include
#include
#defineMAXN35
#defineMAX_NAME256
typedefstructstudent
{
longno;
charname[MAX_NAME];
floata,b,c,d,e;
doublemark_tot;
}STUDENT;
/*---确定是否是学号唯一---*/
intbianli(intno,int*len,STUDENT*data)
{
inti;
for(i=0;i<*len;i++)
if(no==data[i].no)
return1;
return0;
}
/*-----------输入信息子程序---------*/
voidinput(STUDENT*data,int*len)
{
system("cls");
longno=1;
inta,sgn=0,i;
putchar('\n');
printf("请输入新的记录,如果需要退出当前菜单请输入-1.\n");
printf("学号\n姓名高数英语读写英语听说计算机导论程序设计基础\n");
putchar('\n');
printf("如:
201013137183<回车>\n王于铭9395899099<回车>\n");
while(no!
=-1){
do{
scanf("%ld",&no);
if(a=bianli(no,len,data)){
printf("该学号重复!
重新输入学号!
\n");
sgn=1;
}
}while(sgn==1);
if(no==-1)break;
i=*len;
data[*len].no=no;
scanf("%s",data[i].name);
scanf("%f",&data[i].a);
scanf("%f",&data[i].b);
scanf("%f",&data[i].c);
scanf("%f",&data[i].d);
scanf("%f",&data[i].e);
data[*len].mark_tot=data[*len].a+data[*len].b+data[*len].c+data[*len].d+data[*len].e;
(*len)++;
i++;
printf("输入成功!
\n");
}
}
/*---------------输出信息子程序---------------*/
voidoutput(STUDENT*data,intlen)
{
system("cls");
inti;
system("cls");
printf("学号姓名高数英语读写英语听说计算机导论程序设计基础总分");
putchar('\n');
for(i=0;i<80;i++)
putchar('-');
putchar('\n');
for(i=0;i { printf("%8d",data[i].no); printf("%8s",data[i].name); printf("%8.1lf",data[i].a); printf("%8.1lf",data[i].b); printf("%8.1lf",data[i].c); printf("%8.1lf",data[i].d); printf("%8.1lf",data[i].e); printf("%10.1lf",data[i].mark_tot); putchar('\n'); } for(i=0;i<80;i++) putchar('-'); putchar('\n'); printf("按回车键继续."); getchar(); getchar(); } /*--------------排序子程序------------*/ voidsort(STUDENT*data,intlen) { system("cls"); inti,j,k; STUDENTtemp; for(i=0;i for(k=i,j=i+1;j if(data[k].mark_tot>data[j].mark_tot)k=j; if(k! =i){ temp=data[i]; data[i]=data[k]; data[k]=temp; } } output(data,len); } /*--------------------搜索子程序-----------------------*/ voidfind(STUDENT*data,intlen) { system("cls"); intresult; longfind_no; inti; lab: result=0; printf("%s\n","请输入需要查找的学生的学号,退出当前菜单请输入-1."); scanf("%ld",&find_no); if(find_no==-1)return; while(data[result].no! =find_no&&result if(result>=len){ printf("%s\n","未查询到相关信息"); gotolab; } else{ system("cls"); printf("%s\n","查询信息如下: "); for(i=0;i<80;i++) putchar('-'); putchar('\n'); printf("学号姓名高数英语读写英语听说计算机导论程序设计基础总分"); putchar('\n'); printf("%ld",data[result].no); printf("%10s",data[result].name); printf("%8.1f",data[result].a); printf("%8.1f",data[result].b); printf("%8.1f",data[result].c); printf("%8.1f",data[result].d); printf("%8.1f",data[result].e); printf("%10.1lf",data[result].mark_tot); putchar('\n'); for(i=0;i<80;i++) putchar('-'); putchar('\n'); gotolab; } } /*-----------------插入子程序-------------*/ voidinsert(STUDENT*data,int*len) { system("cls"); intno,pos; doublea,b,c,d,e,mark_tot; inti; charname[MAX_NAME]; lab: printf("%s\n","输入新的记录,退出当前菜单请输入-1."); printf("%s\n","格式: 学号"); printf("%s\n","姓名高数英语读写英语听说计算机导论程序设计基础"); scanf("%d",&no); if(no==-1)return; data[*len].no=no; scanf("%s%f%f%f%f%f",name,&a,&b,&c,&d,&e); mark_tot=a+b+c+d+e; pos=0; while((data[pos].mark_tot pos++; for(i=*len-1;i>=pos;i--) data[i+1]=data[i]; data[pos].no=no; strcpy(data[pos].name,name); data[pos].a=a; data[pos].b=b; data[pos].c=c; data[pos].d=d; data[pos].e=e; data[pos].mark_tot=mark_tot; (*len)++; gotolab; } /*-------------删除子程序--------------*/ voiddelete_item(STUDENT*data,int*len) { system("cls"); intno,i,pos; lab: pos=0; printf("%s\n","输入需要删除的学生的学号,退出当前菜单请输入-1."); scanf("%d",&no); if(no==-1)return; while((data[pos].no! =no)&&(pos<*len))pos=pos+1; if(pos>=*len){ printf("%s\n","未找到需要删除的学生"); gotolab; } else{ for(i=pos+1;i<*len;i++) data[i-1]=data[i]; *len=*len-1; if(*len==0){ printf("%s\n","没有任何记录,请按回车键返回."); getchar(); getchar(); return; } gotolab; } } /*---------------统计子程序------------*/ voidstat(STUDENT*data,intlen) { system("cls"); intno_59=0,no_69=0,no_79=0,no_89=0,no_100=0; inti; printf("要统计哪门课程? 请输入统计代码\t\t高数 (1)读写 (2)听说(3)导论(4)C程(5)\n"); scanf("%d",&i); switch(i){ case1: for(i=0;i if(data[i].a<=59)no_59++; elseif(data[i].a<=69)no_69++; elseif(data[i].a<=79)no_79++; elseif(data[i].a<=89)no_89++; elseno_100++; }break; case2: for(i=0;i if(data[i].b<=59)no_59++; elseif(data[i].b<=69)no_69++; elseif(data[i].b<=79)no_79++; elseif(data[i].b<=89)no_89++; elseno_100++; }break; case3: for(i=0;i if(data[i].c<=59)no_59++; elseif(data[i].c<=69)no_69++; elseif(data[i].c<=79)no_79++; elseif(data[i].c<=89)no_89++; elseno_100++; }break; case4: for(i=0;i if(data[i].d<=59)no_59++; elseif(data[i].d<=69)no_69++; elseif(data[i].d<=79)no_79++; elseif(data[i].d<=89)no_89++; elseno_100++; }break; case5: for(i=0;i if(data[i].e<=59)no_59++; elseif(data[i].e<=69)no_69++; elseif(data[i].e<=79)no_79++; elseif(data[i].e<=89)no_89++; elseno_100++; }break; } system("cls"); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("%10s","分数"); printf("%10s","0--59"); printf("%10s","60--69"); printf("%10s","70--79"); printf("%10s","80--89"); printf("%10s","90--100"); putchar('\n'); putchar('\n'); printf("%10s","学生"); printf("%10d",no_59); printf("%10d",no_69); printf("%10d",no_79); printf("%10d",no_89); printf("%10d",no_100); putchar('\n'); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("按回车键返回"); getchar(); getchar(); } /*---------------显示信息子程序------------*/ voidpaint() { inti; system("cls"); printf("%55s\n","学生成绩管理系统\n"); for(i=0;i<80;i++) putchar('-'); putchar('\n'); printf("\t\t1输入学生的基本信息\n"); printf("\t\t2增加学生记录\n"); printf("\t\t3按学号删除学生记录\n"); printf("\t\t4查找学生记录\n"); printf("\t\t5按总分排序学生记录\n"); printf("\t\t6按各分数段输出统计信息\n"); printf("\t\t7保存到文件\n"); printf("\t\t0退出\n"); for(i=0;i<=79;i++) putchar('-'); putchar('\n'); printf("%s\n","请输入各操作对应的序号: "); } voidsave(STUDENT*data,intlen)//将数据保存到文件 { inti; FILE*fp; fp=fopen("成绩统计表.txt","w"); fprintf(fp,"%8s","学号"); fprintf(fp,"%12s","姓名"); fprintf(fp,"%12s","高数"); fprintf(fp,"%12s","英语读写"); fprintf(fp,"%12s","英语听说"); fprintf(fp,"%12s","计算机导论"); fprintf(fp,"%12s","程序设计基础"); fprintf(fp,"%10s\n","总分"); fprintf(fp,"========================================================================\n"); putchar('\n'); for(i=0;i { fprintf(fp,"%8d",data[i].no); fprintf(fp,"%8s",data[i].name); fprintf(fp,"%8.1lf%8.1lf%8.1lf%8.1lf%8.1lf",data[i].a,data[i].b,data[i].c,data[i].d,data[i].e); fprintf(fp,"%10.1lf\n",data[i].mark_tot); } fprintf(fp,"========================================================================\n"); fclose(fp); printf("文件已保存到\"成绩统计表.txt\""); getchar();getchar(); } /*-----------主程序--------------*/ voidmain() { STUDENTdata[MAXN]; intlen=0; charctrl_ch; paint(); scanf("%c",&ctrl_ch); while(ctrl_ch! ='0'){ switch(ctrl_ch){ case'1': input(data,&len); break; case'2': insert(data,&len); break; case'3': delete_item(data,&len); break; case'4': find(data,len); break; case'5': sort(data,len); break; case'6': stat(data,len); break; case'7': save(data,len); break; default: if(ctrl_ch! ='\n')printf("%s\n","输入错误! "); break; } if(ctrl_ch! ='\n')paint(); scanf("%c",&ctrl_ch); } } 调试与测试 7.2.1算法调试过程中出现的问题及解决方法 程序大体能完成各个功能,只进行简单的测试,不足的是没有进行严格的测试。 有一个功能exit()没有实现。 7.2.2主要程序运行结果 运行开始(如图7.1) 图7.1 选择1输入成绩(7.2) 图7.2 选择3按总分排序再按2输出成绩(如图7.3) 图7.3 选择4查找(输入学号3)(如图7.4) 图7.4 选择5插入新数据(图7.5) 图7.5 选择6按学号删除(输入学号4)(图7.6) 图7.6 选择7按平均分输出统计信息(图7.7.17.7.2) 图7.7.1 图7.7.2 选择8保存(图7.8.17.8.2) 图7.8.1 图7.8.2 选择0退出(如图7.9) 图7.9 五、特点小结 ◆采用模块化的设计方案,源程序分文件编辑,使程序结构清晰,增强程序可读性 ◆采用二叉树的存储结构,提高了程序对大量查找和排序的效率,将大量信息有规律地联系在一起,便于处理。 同时也使函数调用时信息的传递变得简单,避免了全局变量的使用 ◆注重细节的程序设计思路,几乎对每一步操作都进行了判错处理,保证了程序能正常地运行 ◆详尽的提示信息,友好的界面设计,提高了程序的实用性和观赏性 进入、退出程序时的简单动态效果的设计,“滴”音报错,使程序的输出效果生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)