欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序管理系统课程设计报告(共22页).doc

    • 资源ID:19365894       资源大小:74KB        全文页数:22页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序管理系统课程设计报告(共22页).doc

    精选优质文档-倾情为你奉上C语言课程设计报告 实 验 报 告 专业: 班级: 姓名: 学号: 题目:学生成绩管理程序该程序是一个简单的学生成绩管理程序. 它可以录入多个同学的基本情况:学号、姓名、数学,英语,C语言分数, 同时还可以输出学生的平均,分总分, 并且能够将所有学生的基本情况和各课的成绩作适当修改和删除以及统计与排名,同时能够将每个学生的成绩输出.一:数据结构设计及用法说明在整个程序中采用了多种数据结构,包括有基本类型中的:1:整型int 、char、long。2:浮点型:double、float。3:导出类型:指针、数组、结构(struct),链表。程序中的几个主要的结构:void 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 内存分配失败 "); /*如没有申请到,打印提示信息*/ 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) /*一次从文件中读取一条学生成绩记录*/ 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=>是否保存修改记录文件?(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; /*统计学生记录*/case 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 密码验证函数功能8 保存成绩1.输入成绩2删除成绩5 插入成绩3查询成绩4 修改成绩6 统计成绩7 成绩排序0 退出系统9 显示成绩三:功能菜单#*菜单* ; * 1 输入成绩 * 2 删除成绩 * 3 查询成绩 * 4 修改成绩 * 5 插入成绩 * 6 统计成绩 " * 7 成绩排序 * 8 保存成绩 * 9 显示成绩 * 0 退出系统 #* 四实验结果;(见程序运行)五:体会:做完这个c 语言程序设计的作业,我学会了很多新知识,对c语言有了更进一步的了解.开始时,我想用结构数组来做这个程序,但后来我发现用做它,修改数据和读取数据都显得很方便.于是,相比较之下,我便选择了链表.编程时会遇到一些困难,最令人头疼的莫过于程序运行时出错了.有时 哪怕是一些很小的错误经常能导致难以预料到的后果,因此,编程时我尽量做到一丝不苟,不敢有丝毫疏忽.通过这次c语言编程的练习,我的编程水平有了进一步的提高,同时也使我对编程有了一个更清醒的了解和认识.六,程序。/密码123#include "stdio.h" /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#include "string.h" /*字符串函数库*/#include "conio.h" /*屏幕操作函数库*/#define HEADER1 " -学生成绩- n"#define HEADER2 " | 学号 | 姓名 |C语言|数学|英语 | 总分 | 平均分 |名次 | 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 " - n"int saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typedef 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; /*Node为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(" #*#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 Disp(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);getchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数: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(nameornum,"name")=0) /*按姓名查询*/r=l->next;while(r) if(strcmp(r->data.name,findmess)=0) /*若找到findmess值的学生姓名*/ return r; r=r->next;return 0; /*若未找到,返回一个空指针*/*输入字符串,并进行长度验证(长度<lens)*/void stringinput(char *t,int lens,char *notice) char n255; do printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens)printf("n 超过所需长度! n"); /*进行长度校验,超过lens值重新输入*/ while(strlen(n)>lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/*输入分数,0<分数<100)*/int numberinput(char *notice)int t=0; do printf(notice); /*显示提示信息*/ scanf("%d",&t); /*输入分数*/ if(t>100 | t<0) printf("n 评分必须在0100! n"); /*进行分数校验*/ while(t>100 | t<0); return t;/*增加学生记录*/void Add(Link l)Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char ch,flag=0,num10;r=l;s=l->next;system("cls");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) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/ if(strcmp(s->data.num,num)=0) flag=1; break; s=s->next; if(flag=1) /*提示用户是否重新输入*/ getchar(); printf("=>人数%s是不存在的,再试一次?(y/n):",num); scanf("%c",&ch); if(ch='y'|ch='Y') continue; else return; else break;p=(Node *)malloc(sizeof(Node); /*申请内存空间*/if(!p) printf("n 内存分配失败 "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/stringinput(p->data.name,15,"Name:");p->data.cgrade=numberinput("C语言0-100:"); /*输入并检验分数,分数必须在0100之间*/p->data.mgrade=numberinput("数学 Score0-100:"); /*输入并检验分数,分数必须在0100之间*/p->data.egrade=numberinput("英语 Score0-100:"); /*输入并检验分数,分数必须在0100之间*/p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; /*计算总分*/p->data.ave=(float)(p->data.total/3); /*计算平均分*/p->data.mingci=0;p->next=NULL; /*表明这是链表的尾部结点*/r->next=p; /*将新建的结点加入链表尾部中*/r=p;saveflag=1; return ;void Qur(Link l) /*按学号或姓名,查询学生记录*/int select; /*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/char searchinput20; /*保存用户输入的查询内容*/Node *p;if(!l->next) /*若链表为空*/system("cls");printf("n=>没有学生记录!n");getchar();return;system("cls");printf("n =>1按学号搜寻=> 2按名称搜索n");printf(" please choice1,2:");scanf("%d",&select);if(select=1) /*按学号查询*/stringinput(searchinput,10,"输入现有的学生学号:");p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/if(p) /*若p!=NULL*/ printheader(); printdata(p); printf(END); printf("按任意键返回"); getchar();else Nofind(); getchar();else if(select=2) /*按姓名查询*/stringinput(searchinput,15,"输入现有的学生姓名:");p=Locate(l,searchinput,"name");if(p) printheader(); printdata(p); printf(END); printf("按任意键返回"); getchar();else Nofind(); getchar();elseWrong();getchar();/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l)int sel;Node *p,*r;char findmess20;if(!l->next) system("cls");printf("n=>没有该学生的记录n");getchar();return;system("cls");Disp(l);printf("n =>1按学号删除 =>2 按姓名删除n");printf(" 请选择1,2:");scanf("%d",&sel);if(sel=1)stringinput(findmess,10,"输入现有的学生学号:");p=Locate(l,findmess,"num");if(p) /*p!=NULL*/ r=l; while(r->next!=p) r=r->next; r->next=p->next;/*将p所指节点从链表中去除*/ free(p); /*释放内存空间*/ printf("n=>删除成功!n"); getchar(); saveflag=1;else Nofind(); getchar();else if(sel=2) /*先按姓名查询到该记录所在的节点*/stringinput(findmess,15,"输入现有的学生姓名:");p=Locate(l,findmess,"name");if(p) r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("n=>删除成功!n"); getchar(); saveflag=1;else Nofind(); getchar();elseWrong();getchar();/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/void Modify(Link l)Node *p;char findmess20;if(!l->next) system("cls");printf("n=>没有该学生记录!n");getchar();return;system("cls");printf("修改学生记录");Disp(l);stringinput(findmess,10,"input the existing student number:"); /*输入并检验该学号*/p=Locate(l,findmess,"num"); /*查询到该节点*/if(p) /*若p!=NULL,表明已经找到该节点*/printf("Number:%s,n",p->data.num);printf("Name:%s,",p->data.name);stringinput(p->data.name,15,"输入新姓名:");printf("C语言分数:%d,",p->data.cgrade);p->data.cgrade=numberinput("C语言分数0-100:");printf("数学分数:%d,",p->data.mgrade);p->data.mgrade=numberinput("数学分数0-100:");printf("英语分数:%d,",p->data.egrade); p->data.egrade=numberinput("英语分数0-100:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=(float)(p->data.total/3);p->data.mingci=0;printf("n=>修改成功!n");Disp(l);saveflag=1;elseNofind();getchar();/*插入记录:按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。*/void Insert(Link l) Link p,v,newinfo; /*p指向插入位置,newinfo指新插入记录*/ char ch,num10,s10; /*s保存插入点位置之前的学号,num保存输入的新记录的学号*/ int flag=0; v=l->next; system("cls"); Disp(l); while(1) stringinput(s,10,"请输入要输入号码插入的位置:"); flag=0;v=l->next; while(v) /*查询该学号是否存在,flag=1表示该学号存在*/ if(strcmp(v->data.num,s)=0) flag=1;break; v=v->next; if(flag=1) break; /*若学号存在,则进行插入之前的新记录的输入操作*/ else getchar(); printf("n=>学号%s是不存在的,再试一次吗?(y/n):",s); scanf("%c",&ch); if(ch='y'|ch='Y') continue; else return; /*以下新记录的输入操作与Add()相同*/stringinput(num,10,"输入新学号:");v=l->next;while(v) if(strcmp(v->data.num,num)=0) printf("=>对不起,新的学号%s已存在!n",num); printheader(); printdata(v); printf("n"); getchar(); return; v=v->next;newinfo=(Node *)malloc(sizeof(Node);if(!newinfo) printf("n allocate memory failure "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(newinfo->data.num,num);stringinput(newinfo->data.name,15,"Name:");newinfo->data.cgrade=numberinput("C语言分数0-100:");newinfo->data.mgrade=numberinput("数学分数0-100:");newinfo->data.egrade=numberinput("英语分数0-100:");newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade;newinfo->data.ave=(float)(newinfo->data.total/3);newinfo->data.mingci=0;newinfo->next=NULL;saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/p=l->next;while(1) if(strcmp(p->data.num,s)=0) /*在链表中插入一个节点*/ newinfo->next=p->next; p->next=newinfo; break; p=p->next; Disp(l); printf("nn"); getchar();/*统计该班的总分第一名和单科第一,和各科不及格人数*/void Tongji(Link l)Node *pm,*pe,*pc,*pt; /*用于指向分数最高的节点*/Node *r=l->next;int countc=0,countm=0,counte=0; /*保存三门成绩中不及格的人数*/if(!r) system("cls");printf("n=>没有学生记录!n");getchar();return ;system("cls");Disp(l);pm=pe=pc=pt=r;while(r)if(r->data.cgrade<60) countc+;if(r->data.mgrade<60) countm+;if(r->data.egrade<60) counte+;if(r->data.cgrade>=pc->data.cgrade) pc=r;if(r->data.mgrade>=pm->data.mgrade) pm=r;if(r->data.egrade>=pe->data.egrade) pe=r;if(r->data.total>=pt->data.total) pt=r;r=r->next;printf("n-统计学生记录-n");printf("C语言 <60:%d 人n",countc);printf("数学 <60:%d 人n",countm);printf("英语 <60:%d 人n",counte);printf("-n");printf("总分最高分 :%s totoal score:%dn",pt->data.name,pt->data.total);printf("英语最高分 :%s totoal score:%dn",pe->data.name,pe->data.eg

    注意事项

    本文(C语言程序管理系统课程设计报告(共22页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开