嵌入式程序课程设计报告-学生成绩管理系统内容摘要:

* 3 search record 4 modify record *\n)。 嵌入式程序课程设计 报告 9 //gotoxy(10,11)。 cprintf( * 5 insert record 6 count record *\n)。 //gotoxy(10,12)。 cprintf( * 7 sort reord 8 save record *\n)。 //gotoxy(10,13)。 cprintf( * 9 display record 0 quit system *\n)。 //gotoxy(10,14)。 cprintf( *************************************************************\n)。 /*cprintf()送格式化输出至文本窗口屏幕中 */ } 图 4 编译结果 图 5 修改后编译结果 5.源程序清单和执行结果 源程序清单 1.程序预处理 包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。 include /*标准输入输出函数库 */ include /*标准函数库 */ include /*字符串函数库 */ include /*屏幕操作函数库 */ define HEADER1 STUDENT \n define HEADER2 | number | name |Comp|Math|Eng | sum | ave |mici | \n define HEADER3 ||||||||| define FORMAT | %10s |%15s|%4d|%4d|%4d| %4d | %.2f |%4d |\n 嵌入式程序课程设计 报告 10 define DATA p,p,p,p,p,p,p,p define END \n int saveflag=0。 /*是否需要存盘的标志变量 */ /*定义与学生有关的数据结构 */ typedef struct student /*标记为 student*/ { char num[10]。 char name[15]。 int cgrade。 int mgrade。 int egrade。 int total。 float ave。 int mingci。 }。 /*定义每条记录或结点的数据结构,标记为: node*/ typedef struct node { struct student data。 /*数据域 */ struct node *next。 /*指针域 */ }Node,*Link。 /*Node 为 node 类型的结构变量, *Link 为 node 类型的指针变量 */ 2.主菜单界面 用户进入成绩管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。 此代码被 main()函数调用。 void menu() { system(cls)。 /*调用 DOS 命令,清屏 .与 clrscr()功能相同 */ cprintf( The Students39。 Grade Management System \n)。 cprintf( *************************Menu********************************\n)。 cprintf( * 1 input record 2 delete record *\n)。 cprintf( * 3 search record 4 modify record *\n)。 cprintf( * 5 insert record 6 count record *\n)。 cprintf( * 7 sort reord 8 save record *\n)。 cprintf( * 9 display record 0 quit system *\n)。 嵌入式程序课程设计 报告 11 cprintf( *************************************************************\n)。 /*cprintf()送格式化输出至文本窗口屏幕中 */ } 3.主函数 main() Main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。 详细分析可参考图 2。 void main() { Link l。 /*定义链表 */ FILE *fp。 /*文件指针 */ int select。 /*保存选择结果变量 */ char ch。 /*保存 (y,Y,n,N)*/ int count=0。 /*保存文件中的记录条数(或结点个数) */ Node *p,*r。 /*定义记录指针变量 */ l=(Node*)malloc(sizeof(Node))。 if(!l) { printf(\n allocate memory failure )。 /*如没有申请到,打印提示信息 */ return。 /*返回主界面 */ } lnext=NULL。 r=l。 fp=fopen(C:\\student,ab+)。 /*以追加方式打开一个二进制文件,可读可写 ,若此文件不存在,会创建此文件 */ if(fp==NULL) { printf(\n=====can not open file!\n)。 exit(0)。 } while(!feof(fp)) { p=(Node*)malloc(sizeof(Node))。 if(!p) { printf( memory malloc failure!\n)。 /*没有申请成功 */ exit(0)。 /*退出 */ 嵌入式程序课程设计 报告 12 } if(fread(p,sizeof(Node),1,fp)==1) /*一次从文件中读取一条学生成绩记录 */ { pnext=NULL。 rnext=p。 r=p。 /*r 指针向后移一个位置 */ count++。 } } fclose(fp)。 /*关闭文件 */ printf(\n=====open file sucess,the total records number is : %d.\n,count)。 menu()。 while(1) { system(cls)。 menu()。 p=r。 printf(\n Please Enter your choice(0~9):)。 /*显示提示信息 */ scanf(%d,amp。 select)。 if(select==0) { if(saveflag==1) /*若对链表的数据有修改且未进行存盘操作,则此标志为 1*/ { getchar()。 printf(\n=====Whether save the modified record to file?(y/n):)。 scanf(%c,amp。 ch)。 if(ch==39。 y39。 ||ch==39。 Y39。 ) Save(l)。 } printf(=====thank you for useness!)。 getchar()。 break。 } switch(select) { case 1:Add(l)。 break。 /*增加学生记录 */ 嵌入式程序课程设计 报告 13 case 2:Del(l)。 break。 /*删除学生记录 */ case 3:Qur(l)。 break。 /*查询学生记录 */ case 4:Modify(l)。 break。 /*修改学生记录 */ case 5:Insert(l)。 break。 /*插入学生记录 */ case 6:Tongji(l)。 break。 /*统计学生记录 */ case 7:Sort(l)。 break。 /*排序学生记录 */ case 8:Save(l)。 break。 /*保存学生记录 */ case 9:system(cls)。 Disp(l)。 break。 /*显示学生记录 */ default: Wrong()。 getchar()。 break。 /*按键有误,必须为数值 09*/ } } } 4.表格形式显示记录 void Disp(Link l) /*显示单链表 l中存储的学生记录,内容为 student结构中定义的内容 */ { Node *p。 p=lnext。 /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息 */ if(!p) /*p==NULL,NUll在 stdlib 中定义为 0*/ { printf(\n=====Not student record!\n)。 getchar()。 return。 } printf(\n\n)。 printheader()。 /*输出表格头部 */ while(p) /*逐条输出链表中存储的学生信息 */ { printdata(p)。 p=pnext。 /*移动至 下一个结点 */ printf(HEADER3)。 } 嵌入式程序课程设计 报告 14 getchar()。 } 5.记录查找定位 Node* Locate(Link l,char findmess[],char nameornum[]) { Node *r。 if(strcmp(nameornum,num)==0) /*按学号查询 */ { r=lnext。 while(r) { if(strcmp(r,findmess)==0) /*若找到 findmess 值的学号 */ return r。 r=rnext。 } } else if(strcmp(nameornum,name)==0) /*按姓名查询 */ { r=lnext。 while(r) { if(strcmp(r,findmess)==0) /*若找到 findmess 值的学生姓名 */ return r。 r=rnext。 } } return 0。 /*若未找到, 返回一个空指针 */ } 6.格式化输入数据 void stringinput(char *t,int lens,char *notice) { char n[255]。 do{ printf(notice)。 /*显示提示信息 */ scanf(%s,n)。 /*输入字符串 */ if(strlen(n)lens)printf(\n exceed the required length! \n)。 /*进行长度校验,超过 lens值重新输入 */ }while(strlen(n)lens)。 嵌入式程序课程设计 报告 15 strcpy(t,n)。 /*将输入的字符串拷贝到字符串 t 中 */ } /*输入分数, 0=分数 = 100)*/ int numberinput(char *notice) { int t=0。 do{ printf(notice)。 /*显示提示信息 */ scanf(%d,amp。 t)。 /*输入。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。