计算机高级语言编程训练设计报告.docx
- 文档编号:29350271
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:24
- 大小:285.53KB
计算机高级语言编程训练设计报告.docx
《计算机高级语言编程训练设计报告.docx》由会员分享,可在线阅读,更多相关《计算机高级语言编程训练设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
计算机高级语言编程训练设计报告
计算机高级语言编程训练
设计报告
(2009-2010学年第二学期)
题目:
学生成绩管理系统
班级:
设计人员:
学号:
联系电话:
指导教师:
日期:
小组其他成员:
班级
学号
姓名
联系电话
评阅意见:
成绩:
日期:
评阅教师:
一、设计的能模块
有8个模块
1、输入多条记录函数(黎金盛设计);
2、输入单条数据(黎金盛设计)
3、显示(李浩文设计)
4、寻找(李浩文设计)
5、删除(金国望设计)
6、排序(金国望设计)
7、保存(金国望设计)
9、读取(金国望设计)
二、题目描述
C语言学生成绩管理程序。
本程序具有一次性输入单条及多条学生成绩记录功能,有显示记录、删除、保存、导入功能。
程序界面简单,操作人性化。
三、核心算法
1、功能模块五(删除记录)的流程图(NS图)如图1所示。
图1功能删除记录
2、功能模块六(排序)的流程图(NS图)如图2所示
图2功能(排序)
3、功能模块七(保存文件)的流程图(NS图)如图3所示
图3功能(保存文件)
4、功能模块七(读取文件)的流程图(NS图)如图4所示
图3功能(读取记录文件)
四、使用(操作)说明
1、运行的初始界面如图
(1)所示。
图
(1)初始界面
键入1:
进入中文提示的操作页面
键入2:
进入英文提示的操作页面
键入3:
进入中英文提示的操作页面
2、主菜单页面,如图
(2)所示。
图
(2)主菜单页面
键入相关的序号可按提示进行相关操作。
五、开发文档
1、包含文件
文件名称
功能描述
Setup.c
初始页面,中文、英文、中英文结合选择菜单。
Chinese.c
中文主程序:
有输入自定义记录,显示,寻找,排序,删除,保存,读取功能。
English.c
英文主程序:
有输入自定义记录,显示,寻找,排序,删除,保存,读取功能。
Main.c
中英文结合程序:
有输入自定义记录,显示,寻找,排序,删除,保存,读取功能。
2、函数说明
函数名称
功能描述
参数说明(类型、用处)
fopen
打开文件
fp=fopen(infile,"r")打开一个二进制文件,为只读方式
feof
检查文件是否结束
遇到文件结束符返回非零值,否则返回0
fread
读取数据
fread(p1,LEN,1,fp)!
=1没读到数据
fclose
关闭fp所指的文件
feof(fp),关闭所指的文件,释放缓冲区
student*init()
初始化函数
int类型,自定义初始化函数
menu_select()
菜单函数
自定义菜单函数
student*create()
创建链表
自定义创建链表函数
student*sort(student*head)
排序
自定义函数,void类型,排序
student*insert(student*head,student*mynew)
插入记录
自定义函数,插入记录功能模块函数,利益菜单操作
save(student*head)
保存文件
自定义函数,void类型,保存文件
student*load()
读文件
自定义函数,读文件功能模块函数,利益菜单操作
info(void)
背景
自定义函数,void类型,背景颜色
3、程序文件说明
文件名称
功能描述
Setup.c
初始页面所在源文件
Chinese.c
中文主程序所在源文件
English.c
英文主程序所在源文件
Main.c
中英文主程序所在源文件
六、源代码
#include
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(student)/*将student占用的内存大小值赋给LEN*/
typedefstructstu/*定义结构体数组*/
{charnum[6];
charname[5];
intscore[3];
intsum;
floataverage;
intorder;
structstu*next;
}student;(金国望设计)
/*函数*/
student*init();/*初始化函数*/
intmenu_select();/*菜单函数*/
student*create();/*创建链表*/
voidprint(student*head);/*显示全部记录*/
voidsearch(student*head);/*查找记录*/
student*mydelete(student*head);/*删除记录*/
student*sort(student*head);/*排序*/
student*insert(student*head,student*mynew);/*插入记录*/
voidsave(student*head);/*保存文件*/
student*load();/*读文件*/
voidinitg(void){
intgdriver=DETECT,gmode;/*初始图像驱动*/
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"");
}
voidinfo(void){/*设置背景及文本颜色*/
settextjustify(1,2);
settextstyle(3,0,5);
setcolor(RED);
setbkcolor(BLACK);
cleardevice();
outtextxy(320,200,"MAKEBYdianzi1083jgw");
}
/*主函数界面*/
voidmain()
{student*head,mynew;
head=init();/*链表初始化,使head的值为NULL*/
initg();
info();/*背景*/
for(;;)/*循环无限次*/
{switch(menu_select())
{
case1:
head=create();break;
case2:
head=insert(head,&mynew);break;/*&mynew表示返回地址*/
case3:
print(head);break;
case4:
search(head);break;
case5:
head=mydelete(head);break;
case6:
head=sort(head);break;
case7:
save(head);break;
case8:
head=load();break;
case9:
exit(0);/*结束*/
}
}
}
/*初始化函数*/
student*init()
{
returnNULL;/*返回空指针*/
}
/*菜单选择函数*/
menu_select()
{intn;
printf("\n本程序具有一次性输入单条及多条学生成绩记录功能,有显示记录、删除、保存、导入功能。
程序界面简单,操作人性化。
");/*按任一键进入主菜单*/
getch();/*等待输入*/
system("cls");
printf("********************************************************************************\n");
printf("\t\t欢迎使用C语言学生成绩管理程序\n");
printf("\n\t专业:
电子信息工程\t\t\t班级:
1083\t\n");
printf("\n\t学号:
200811611316\t\t\t姓名:
金国望\t\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1.输入自定条数多条学生成绩记录Entertherecord\n");/*输入学生成绩记录*/
printf("\t\t\t2.插入单条记录Insertrecordtolist\n");/*插入*/
printf("\t\t\t3.显示Printtherecord\n");/*显示*/
printf("\t\t\t4.寻找Searchrecordonname\n");/*寻找*/
printf("\t\t\t5.删除mydeletearecord\n");/*删除*/
printf("\t\t\t6.排序Sorttomakemynewafile\n");/*排序*/
printf("\t\t\t7.保存Savethefile\n");/*保存*/
printf("\t\t\t8.读取Loadthefile\n");/*读取*/
printf("\t\t\t9.退出Quit\n");/*退出*/
printf("********************************************************************************\n");
do{
printf("\n\t\t\t输入你的选择Enteryourchoice(1~9):
");
scanf("%d",&n);
getchar();/*防止出现死循环的问题*/
}while(n<1||n>9);/*如果选择项不在1~9之间则重输*/
return(n);/*返回选择项,主函数根据该数调用相应的函数*/
}(金国望设计)
/*功能一、输入多条记录函数*/(黎金盛设计)
student*create()
{inti,s,k,t;
student*head=NULL,*p;/*定义函数.此函数带回一个指向链表头的指针*/
system("cls");/*执行DOS下的清屏命令*/
printf("一次性输入的记录条数(recordnumber):
");
scanf("%d",&t);
for(k=0;k {p=(student*)malloc(LEN);/*开辟一个新的单元*/ if(! p)/*如果指针p为空*/ {printf("\n输出内存溢出.Outofmemory.");/*输出内存溢出*/ return(head);/*返回头指针,下同*/ } printf("输入%d第一位同学学号Enterthenum: ",k+1); scanf("%s",p->num); if(p->num[0]=='0')break;/*如果学号首字符为0则结束输入*/ printf("输入名字Enterthename: "); scanf("%s",p->name); printf("请输入%d门成绩Pleaseenterthe%dscores\nscore1(高数成绩)score2(物理成绩)score3为(C语言成绩)\n",3);/*提示开始输入成绩*/ s=0;/*计算每个学生的总分,初值为0*/ for(i=0;i<3;i++)/*3门课程循环3次*/ { do{ printf("成绩score%d: ",i+1); scanf("%d",&p->score[i]); if(p->score[i]<0||p->score[i]>100)/*确保成绩在0~100之间*/ printf("数据错误,请重新输入Dataerror,pleaseenteragain.\n"); }while(p->score[i]<0||p->score[i]>100); s=s+p->score[i];/*累加各门成绩*/ } p->sum=s;/*将总分保存*/ p->average=(float)s/3;/*先用强制类型转换将s转换成float型,再求平均值*/ p->order=0;/*未排序前此值为0*/ p->next=head;/*将头结点做为新输入结点的后继结点*/ head=p;/*新输入结点为新的头结点*/ } return(head); } /*功能二、插入单个新的记录函数*/(黎金盛设计) student*insert(student*head,student*mynew) {student*p0,*p1,*p2; intn=0,sum1,i; p1=head;/*使p1指向第一个结点*/ p0=mynew;/*p0指向要插入的结点*/ printf("\nPleaseenteramynewrecord.\n");/*提示输入记录信息*/ printf("输入学号Enterthenum: "); scanf("%s",mynew->num); printf("输入名字Enterthename: "); scanf("%s",mynew->name); printf("请输入%d门成绩Pleaseenterthe%dscores\nscore1(高数成绩)score2(物理成绩)score3为(C语言成绩)\n",3); sum1=0;/*保存新记录的总分,初值为0*/ for(i=0;i<3;i++) { do{ printf("成绩score%d: ",i+1); scanf("%d",&mynew->score[i]); if(mynew->score[i]>100||mynew->score[i]<0) printf("数据错误Dataerror,pleaseenteragain.\n"); }while(mynew->score[i]>100||mynew->score[i]<0); sum1=sum1+mynew->score[i];/*累加各门成绩*/ } mynew->sum=sum1;/*将总分存入新记录中*/ mynew->average=(float)sum1/3; mynew->order=0; if(head==NULL)/*原来的链表是空表*/ {head=p0;p0->next=NULL;}/*使p0指向的结点作为头结点*/ else {while((p0->average =NULL)) {p2=p1;/*使p2指向刚才p1指向的结点*/ p1=p1->next;/*p1后移一个结点*/ } if(p0->average>=p1->average) {if(head==p1)head=p0;/*插到原来第一个结点之前*/ elsep2->next=p0;/*插到p2指向的结点之后*/ p0->next=p1;} else {p1->next=p0;p0->next=NULL;}/*插到最后的结点之后*/ } n=n+1;/*结点数加1*/ head=sort(head);/*调用排序的函数,将学生成绩重新排序*/ printf("\n学生student%s已被更新havebeeninserted.\n",mynew->name); printf("不要忘了保存Don'tforgettosavethemynewfile.\n"); return(head); } /*功能三、显示全部记录函数*/(金国望设计) voidprint(student*head) {inti=0;/*统计记录条数*/ student*p;/*移动指针*/ system("cls"); p=head;/*初值为头指针*/ printf("\n************************************student************************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("|Rec|Num|Name|Math|Physics|C|Sum|Ave|Order|\n"); printf("|序号|姓名|高数|物理|C语言|Sum|Ave|Order|\n"); printf("-------------------------------------------------------------------------------\n"); while(p! =NULL) { i++; printf("|%3d|%4s|%-4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n", i,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); p=p->next; } printf("-------------------------------------------------------------------------------\n"); printf("**************************************END**************************************\n"); } /*功能四、查找记录函数*/(金国望设计) voidsearch(student*head) {student*p;/*移动指针*/ chars[5];/*存放姓名用的字符数组*/ system("cls"); printf("请输入个姓名来查找.Pleaseenternameforsearching.\n"); scanf("%s",s); p=head;/*将头指针赋给p*/ while(strcmp(p->name,s)&&p! =NULL)/*当记录的姓名不是要找的,或指针不为空时*/ p=p->next;/*移动指针,指向下一结点*/ if(p! =NULL)/*如果指针不为空*/ {printf("\n*************************************FOUND************************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("|Num|Name|Math|Physics|C|Sum|Ave|Order|\n"); printf("|序号|姓名|高数|物理|C语言|Sum|Ave|Order|\n"); printf("-------------------------------------------------------------------------------\n"); printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n", p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("-------------------------------------------------------------------------------\n"); printf("***************************************END**************************************\n"); } else printf("\n没有该学生Thereisnonum%sstudentonthelist.\n",s);/*显示没有该学生*/ } /*功能五、删除记录函数*/(金国望设计) student*mydelete(student*head) {intn=0; student*p1,*p2;/*p1为查找到要删除的结点指针,p2为其前驱指针*/ charc,s[6];/*s[6]用来存放学号,c用来输入字母*/ system("cls"); printf("请输入要删除的学号Pleaseenterthemydeletednum: "); scanf("%s",s); p1=p2=head;/*给p1和p2赋初值头指针*/ while(strcmp(p1->num,s)&&p1! =NULL)/*当记录的学号不是要找的,或指针不为空时*/ {p2=p1;/*将p1指针值赋给p2作为p1的前驱指针*/ p1=p1->next;/*将p1指针指向下一条记录*/ } if(strcmp(p1->num,s)==0)/*学号找到了*/ {printf("**************************************FOUND************************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("|Nu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 高级 语言 编程 训练 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)