欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    C语言课程设计学生成绩管理1 .doc

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

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

    C语言课程设计学生成绩管理1 .doc

    课 程 设 计 报 告课程名称 C语言课程设计 课题名称 学生成绩管理 专 业 电气自动化 班 级 学 号 姓 名 指导教师 2011年 6 月 20 日 目录封面1目录2任务书3学生成绩管理系统需求分析,概要设计,详细设计5程序调试8程序界面8附件(程序代码)10详细设计24运行与调试,参考文献24源程序25参考文献37总结心得37评分表37 湖南工程学院课 程 设 计 任 务 书课程名称 C课程设计 课 题 学生成绩管理 专业班级 电气1085 学生姓名 学 号 05 指导老师 审 批 任务书下达日期 2011 年 6 月 20 日任务完成日期 2011 年 6 月 日湖南工程学院课 程 设 计 任 务 书一设计内容:设计与开发一个学生成绩管理系统,对学生的学号、姓名、课程成绩、总分、平均成绩等信息进行管理、主要功能以下基本功能模块图1所示。主程序初始化输入显示删除查找添加计算排序退出图1 基本功能模块 二设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。5)实际操作过程中遇到的问题及解决方法:设计总结及心得体会.6)上机演示。成绩评定:指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分: 平时出勤 (占10%) 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%) 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%) 设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。 独立完成情况(占10%)。 运行所设计的系统。三、进度安排第十九周 星期一 14:3018:00 星期二14:3018:00 星期三14:3018:00附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。成绩管理系统1)需求分析:学生信息是存放在文件中的,所以应该提供文件的输入,输出,插入,删除等操作,在程序中需要浏览学生的信息,应提供显示,查找,排序等操作,另外还应提供键盘式选择菜单提供选择功能。2)概要设计:根据上面的需求分析,可以将这个系统大致划分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块。1.录入学生信息2显示学生信息3查找学生信息5修改学生信息4删除学生信息6统计学生信息7保存学生信息0退出系统功能选择1按学号查找0按姓名查找 1按学号修改0按姓名修改3)详细设计:1输入初始的学生信息:其中包括学生的姓名、学号,性别以及学生的语文、数学、英语和计算机等相关信息。先打印出已有学生信息Disp(l)输入学号格式化学号并并检验若输入学号为0则退出系统若学号被占用,重新输入未占用的学号2. 查询模块:找到就输出此学生全部信息包括3科的成绩。查询按学号查询按成绩查询运行显示成绩3. 插入模块:其中通过学号的大小来比较的,并且以此来排序。保存插入点之前的学号,并输入学号查询该学号是否存在插入之前的节点4. 输出学生的信息以及成绩:通过学生的姓名来查看学生的3科成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出3科成绩的平均分数,最高和最低分数。5. 退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。4)程序调试:问题一:学生初始信息模块: 其中包括学生的姓名、学号、3门科目的成绩等相关信息;当正确输入存在的学生号,系统进行判断时,提示不存在此学生。解决办法及步骤:1. 一个个输出所有学生的学号,检查文件中是否有学生,发现有。2. 既然有此学生,那么检查循环判断是否有此学生的语句,发现没有错。3. 输出用于循环检查语句中的学生信息,发现乱码。4. 仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其它类型的指针变量。问题二:查询模块:找到就输出此学生全部信息包括学生的3科成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的3科成绩。解决办法及步骤:1. 检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息一级学生的3科成绩。2. 检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样,我们应当仔细输入查找信息。5)程序界面:1.初始界面2.输入学生信息节点界面:3. 删除节点界面;4. 查找节点界面:1)运行与调试:调试:将图中/*/去掉在/*计算总分和均值*/上加上个运行:2)源程序 /*xuesheng.c*/*头文件(.h)*/#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*其它说明*/#include "string.h" /*字符串函数*/#include "conio.h" /*屏幕操作函数*/#include "mem.h" /*内存操作函数*/#include "ctype.h" /*字符操作函数*/#include "alloc.h" /*动态地址分配函数*/#define N 3 /*定义常数*/typedef struct z1 /*定义数据结构*/ char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *h); /*删除记录*/void print(STUDENT *h); /* 显示所有记录*/void search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保存*/STUDENT *load(); /*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/STUDENT *insert(STUDENT *h); /*插入记录*/void append(); /*追加记录*/STUDENT *sort(STUDENT *h); /*排序*/int menu_select(); /*菜单函数*/*主函数开始*/main() int i; STUDENT *head; /*链表定义头指针*/ head=init(); /*初始化链表*/ clrscr(); /*清屏*/ for(;) /*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; /*执行初始化*/ case 1:head=create();break; /*创建链表*/ case 2:head=delete(head);break; /*删除记录*/ case 3:print(head);break; /*显示全部记录*/ case 4:search(head);break; /*查找记录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:head=sort(head);break; /*排序*/ case 10:append();break; /*追加记录*/ case 11:exit(0); /*如菜单返回值为14程序结束*/ /*菜单函数,返回值为整数*/menu_select() char *menu="*MENU*", /*定义菜单字符串数组*/ " 0. init list", /*初始化*/ " 1. Enter list", /*输入记录*/ " 2. Delete a record from list", /*从表中删除记录*/ " 3. print list ", /*显示单链表中所有记录*/ " 4. Search record on name", /*按照姓名查找记录*/ " 5. Save the file", /*将单链表中记录保存到文件中*/ " 6. Load the file", /*从文件中读入记录*/ " 7. compute the score", /*计算所有学生的总分和均分*/ " 8. insert record to list ", /*插入记录到表中*/ " 9. sort to make new file", /*排序*/ " 10. append record to file", /*追加记录到文件中*/ " 11. Quit" /*退出*/ char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf("press any key enter menu.n"); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolor(YELLOW); /*设置文本显示颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动光标*/ putch(0xc9); /*输出左上角边框*/ for(i=1;i<44;i+) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 */ for(i=3;i<20;i+) gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); /*输出右垂直线*/ gotoxy(10,20);putch(0xc8); /*输出左上角边框*/ for(i=1;i<44;i+) putch(0xcd); /*输出下边框水平线*/ putch(0xbc); /*输出右下角边框*/ window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i<13;i+) /*输出主菜单数组*/ gotoxy(10,i+1); cprintf("%s",menui); textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ gotoxy(10,21); /*移动光标*/ do printf("n Enter you choice(014):"); /*在菜单窗口外显示提示信息*/ scanf("%s",s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ while(c<0|c>11); /*选择项不在014之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/STUDENT *init() return NULL;/*创建链表*/STUDENT *create() int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ for(;) info=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/ if(!info) /*如果指针info为空*/ printf("nout of memory"); /*输出内存溢出*/ return NULL; /*返回空指针*/ inputs("enter no:",info->no,11); /*输入学号并校验*/ if(info->no0='') break; /*如果学号首字符为则结束输入*/ inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/ printf("please input %d score n",N); /*提示开始输入成绩*/ s=0; /*计算每个学生的总分,初值为0*/*N门课程循环N次*/*将总分保存*/*求出平均值*/for(i=0;i<N;i+) /*N门课程循环N次*/ do printf("score%d:",i+1); /*提示输入第几门课程*/ scanf("%d",&info->scorei); /*输入成绩*/ if(info->scorei>100|info->scorei<0)/*确保成绩在0100之间*/ printf("Bad data,repeat inputn"); /*出错提示信息*/ while(info->scorei>100|info->scorei<0); s=s+info->scorei; /*累加各门课程成绩*/ info->sum=s; /*将总分保存*/ info->average=(float)s/N; /*求出平均值*/ info->order=0; /*未排序前此值为0*/ info->next=h; /*将头结点做为新输入结点的后继结点*/ h=info; /*新输入结点为新的头结点*/ return(h); /*返回头指针*/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*显示提示信息*/ scanf("%s",p); /*输入字符串*/ if(strlen(p)>count)printf("n too long! n"); /*进行长度校验,超过count值重输入*/ while(strlen(p)>count); strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/*输出链表中结点信息*/void print(STUDENT *h) int i=0; /* 统计记录条数*/ STUDENT *p; /*移动指针*/ clrscr(); /*清屏*/ p=h; /*初值为头指针*/ printf("nnn*STUDENT*n"); printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|-|n"); while(p!=NULL) i+; printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n", i, p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->average,p->order); p=p->next; printf("*end*n");/*删除记录*/STUDENT *delete(STUDENT *h) STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/ char s11; /*存放学号*/ clrscr(); /*清屏*/ printf("please deleted non"); /*显示提示信息*/ scanf("%s",s); /*输入要删除记录的学号*/ q=p=h; /*给q和p赋初值头指针*/*当记录的学号不是要找的,或指针不为空时*/ q=p; /*将p指针值赋给q作为p的前驱指针*/ p=p->next; /*将p指针指向下一条记录*/ if(p=NULL) /*如果p为空,说明链表中没有该结点*/ printf("nlist no %s studentn",s); else /*p不为空,显示找到的记录信息*/ printf("*have found*n"); printf("|no | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|n"); printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n", p->no, p->name,p->score0,p->score1,p->score2,p->sum, p->average,p->order); printf("*end*n"); getch(); /*压任一键后,开始删除*/ if(p=h) /*如果p=h,说明被删结点是头结点*/ h=p->next; /*修改头指针指向下一条记录*/ else q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/ free(p); /*释放p所指结点空间*/ printf("n have deleted No %s studentn",s); printf("Don't forget saven");/*提示删除后不要忘记保存文件*/ return(h); /*返回头指针*/*查找记录*/void search(STUDENT *h) STUDENT *p; /* 移动指针*/ char s15; /*存放姓名的字符数组*/ clrscr(); /*清屏幕*/ printf("please enter name for searchn"); scanf("%s",s); /*输入姓名*/ p=h; /*将头指针赋给p*/ while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/ p=p->next; /*移动指针,指向下一结点*/ if(p=NULL) /*如果指针为空*/ printf("nlist no %s studentn",s); /*显示没有该学生*/ else /*显示找到的记录信息*/ printf("nn*havefound*n"); printf("|nO | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|n"); printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n", p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->average,p->order); printf("*end*n"); /*插入记录*/STUDENT *insert(STUDENT *h) STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/ char s11; /*保存插入点位置的学号*/ int s1,i; printf("please enter location before the non"); scanf("%s",s); /*输入插入点学号*/ printf("nplease new recordn"); /*提示输入记录信息*/ info=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/ if(!info) printf("nout of memory"); /*如没有申请到,内存溢出*/ return NULL; /*返回空指针*/ inputs("enter no:",info->no,11); /*输入学号*/ inputs("enter name:",info->name,15); /*输入姓名*/ printf("please input %d score n",N); /*提示输入分数*/ s1=0; /*保存新记录的总分,初值为0*/ for(i=0;i<N;i+) /*N门课程循环N次输入成绩*/ do /*对数据进行验证,保证在0100之间*/ printf("score%d:",i+1); scanf("%d",&info->scorei); if(info->scorei>100|info->scorei<0) printf("bad data,repeat inputn"); while(info->scorei>100|info->scorei<0); s1=s1+info->scorei; /*计算总分*/ info->sum=s1; /*将总分存入新记录中*/ info->average=(float)s1/N; /*计算均分*/ info->order=0; /*名次赋值0*/ info->next=NULL; /*设后继指针为空*/ p=h; /*将指针赋值给p*/ q=h; /*将指针赋值给q*/ while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/ q=p; /*保存指针p,作为下一个p的前驱*/ p=p->next; /*将指针p后移*/ if(p=NULL) /*如果p指针为空,说明没有指定结点*/ if(p=h) /*同时p等于h,说明链表为空*/ h=info; /*新记录则为头结点*/ else q->next=info; /*p为空,但p不等于h,将新结点插在表尾*/ else if(p=h) /*p不为空,则找到了指定结点*/ info->next=p; /*如果p等于h,则新结点插入在第一个结点之前*/ h=info; /*新结点为新的头结点*/ else info->next=p; /*不是头结点,则是中间某个位置,新结点的后继为p*/ q->next=info; /*新结点作为q的后继结点*/ printf("n -have inserted %s student-n",info->name); printf("-Don't forget save-n"); /*提示存盘*/ return(h); /*返回头指针*/*保存数据到文件*/void save(STUDENT *h) FILE *fp; /*定义指向文件的指针*/ STUDENT *p; /* 定义移动指针*/ char outfile10; /*保存输出文件名*/ printf("Enter outfile name,for example c:f1te.txt:n"); /*提示文件名格式信息*/ scanf("%s",outfile); if(fp=fopen(outfile,"wb")=NULL) /*为输出打开一个二进制文件,如没有则建立*/ printf("can not open filen"); exit(1); printf("nSaving file.n"); /*打开文件,提示正在保存*/ p=h; /*移动指针从头指针开始*/ while(p!=NULL) /*如p不为空*/ fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/ p=p->next; /*指针后移*/ fclose(fp); /*关闭文件*/ printf("-save success!-n"); /*显示保存成功*/* 从文件读数据*/STUDENT *load() STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/ FILE *fp; /* 定义指向文件的指针*/ char infile10; /*保存文件名*/ printf("Enter infile name,for example c:f1te.txt:n"); scanf("%s",infile); /*输入文件名*/ if(fp=fopen(infile,"rb")=NULL) /*打开一个二进制文件,为读方式*/ printf("can not open filen"); /*如不能打开,则结束程序*/ exit(1); printf("n -Loading file!-n"); p=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/ if(!p) printf("out of memory!n"); /*如

    注意事项

    本文(C语言课程设计学生成绩管理1 .doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开