C语言程序管理系统课程设计报告(共22页).doc
《C语言程序管理系统课程设计报告(共22页).doc》由会员分享,可在线阅读,更多相关《C语言程序管理系统课程设计报告(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上C语言课程设计报告 实 验 报 告 专业: 班级: 姓名: 学号: 题目:学生成绩管理程序该程序是一个简单的学生成绩管理程序. 它可以录入多个同学的基本情况:学号、姓名、数学,英语,C语言分数, 同时还可以输出学生的平均,分总分, 并且能够将所有学生的基本情况和各课的成绩作适当修改和删除以及统计与排名,同时能够将每个学生的成绩输出.一:数据结构设计及用法说明在整个程序中采用了多种数据结构,包括有基本类型中的:1:整型int 、char、long。2:浮点型:double、float。3:导出类型:指针、数组、结构(struct),链表。程序中的几个主要的结构:void
2、 main() int mm; for(;1;)printf(请输入密码n); scanf(%d,&mm); if(mm=123)break; else printf(密码错误;请重输入密码n); 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 内存分配失败 ); /*如没有申
3、请到,打印提示信息*/ return ; /*返回主界面*/ l-next=NULL;r=l;fp=fopen(C:student,ab+); /*以追加方式打开一个二进制文件,可读可写,若此文件不存在,会创建此文件*/if(fp=NULL) printf(n=无法打开文件!n); exit(0);while(!feof(fp)p=(Node*)malloc(sizeof(Node);if(!p) printf( memory malloc failure!n); /*没有申请成功*/ exit(0); /*退出*/ if(fread(p,sizeof(Node),1,fp)=1) /*一次从
4、文件中读取一条学生成绩记录*/ p-next=NULL; r-next=p; r=p; /*r指针向后移一个位置*/ count+; fclose(fp); /*关闭文件*/printf(n=打开文件成功,共记录的数目: %d.n,count);menu();while(1) system(cls); menu(); p=r; printf(n 请输入您的选择 (09):); /*显示提示信息*/ scanf(%d,&select);if(select=0) if(saveflag=1) /*若对链表的数据有修改且未进行存盘操作,则此标志为1*/ getchar(); printf(n=是否保
5、存修改记录文件?(y/n):); scanf(%c,&ch); if(ch=y|ch=Y) Save(l); printf(=谢谢使用!); getchar(); break;switch(select)case 1:Add(l);break; /*增加学生记录*/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; /*统计学生记录*/cas
6、e 7:Sort(l);break; /*排序学生记录*/case 8:Save(l);break; /*保存学生记录*/case 9:system(cls);Disp(l); printf(按任何键返回); char a; scanf(%d,&a);break; /*显示学生记录*/ default: Wrong();getchar();break; /*按键有误,必须为数值0-9*/程序中建立了多个函数分别来完成每个所要求的功能:读文件和写文件函数,建链表函数,插入、修改和删除函数,排序、统计和输出函数.程序利用各个函数来完成前面要求所需要的功能。 二:程序调用图:主函数main 密码验证
7、函数功能8 保存成绩1.输入成绩2删除成绩5 插入成绩3查询成绩4 修改成绩6 统计成绩7 成绩排序0 退出系统9 显示成绩三:功能菜单#*菜单* ; * 1 输入成绩 * 2 删除成绩 * 3 查询成绩 * 4 修改成绩 * 5 插入成绩 * 6 统计成绩 * 7 成绩排序 * 8 保存成绩 * 9 显示成绩 * 0 退出系统 #* 四实验结果;(见程序运行)五:体会:做完这个c 语言程序设计的作业,我学会了很多新知识,对c语言有了更进一步的了解.开始时,我想用结构数组来做这个程序,但后来我发现用做它,修改数据和读取数据都显得很方便.于是,相比较之下,我便选择了链表.编程时会遇到一些困难,最
8、令人头疼的莫过于程序运行时出错了.有时 哪怕是一些很小的错误经常能导致难以预料到的后果,因此,编程时我尽量做到一丝不苟,不敢有丝毫疏忽.通过这次c语言编程的练习,我的编程水平有了进一步的提高,同时也使我对编程有了一个更清醒的了解和认识.六,程序。/密码123#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*/#define HEADER1 -学生成绩- n#define HEADER2 | 学号 | 姓名 |C语言|数学|
9、英语 | 总分 | 平均分 |名次 | n#define HEADER3 |-|-|-|-|-|-|-|-| #define FORMAT | %-10s |%-15s|%4d |%4d|%4d | %4d | %.2f |%4d |n#define DATA p-data.num,p-data.name,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#define END - nint saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typede
10、f struct student /*标记为student*/char num10; /*学号*/char name15; /*姓名*/int cgrade; /*C语言成绩*/int mgrade; /*数学成绩*/int egrade; /*英语成绩*/int total; /*总分*/float ave; /*平均分*/int mingci; /*名次*/;/*定义每条记录或结点的数据结构,标记为:node*/typedef struct nodestruct student data; /*数据域*/struct node *next; /*指针域*/Node,*Link; /*Nod
11、e为node类型的结构变量,*Link为node类型的指针变量*/void menu() /*主菜单*/system(cls); /*调用DOS命令,清屏.与clrscr()功能相同*/cprintf( 学生成绩管理系统 n);cprintf( #*菜单*#n); cprintf( * 1 输入成绩 * 2 删除成绩 *n);cprintf( * 3 查询成绩 * 4 修改成绩 *n);cprintf( * 5 插入成绩 * 6 统计成绩 *n);cprintf( * 7 成绩排序 * 8 保存成绩 *n);cprintf( * 9 显示成绩 * 0 退出系统 *n);cprintf( #*#
12、n);/*cprintf()送格式化输出至文本窗口屏幕中*/void printheader() /*格式化输出表头*/printf(HEADER1);printf(HEADER2);printf(HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/Node* p;p=pp;printf(FORMAT,DATA);void Wrong() /*输出按键错误信息*/printf(nnnnn*输入有错!按任意键继续!*n);getchar();void Nofind() /*输出未查找此学生的信息*/printf(n=没有找到这名学生!n);void Di
13、sp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/Node *p;p=l-next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p) /*p=NULL,NUll在stdlib中定义为0*/printf(n=没有学生记录!n);getchar();return;printf(nn);printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/printdata(p);p=p-next; /*移动直下一个结点*/printf(HEADER3);g
14、etchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess保存要查找的具体内容; nameornum保存按什么查找; 在单链表l中查找;*/Node* Locate(Link l,char findmess,char nameornum)Node *r;if(strcmp(nameornum,num)=0) /*按学号查询*/r=l-next;while(r) if(strcmp(r-data.num,findmess)=0) /*若找到findmess值的学号*/ return r; r=r-next;else if(strcmp(nameornu
15、m,name)=0) /*按姓名查询*/r=l-next;while(r) if(strcmp(r-data.name,findmess)=0) /*若找到findmess值的学生姓名*/ return r; r=r-next;return 0; /*若未找到,返回一个空指针*/*输入字符串,并进行长度验证(长度lens)printf(n 超过所需长度! n); /*进行长度校验,超过lens值重新输入*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/*输入分数,0分数100 | t100 | tnext;system(cls);
16、Disp(l); /*先打印出已有的学生信息*/while(r-next!=NULL)r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/stringinput(num,10,输入号码(按0返回菜单):); /*格式化输入学号并检验*/flag=0;if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return;s=l-next; while(s) /*查询该学号是否已经存在,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 管理 系统 课程设计 报告 22
限制150内