用C语言编写一个学生成绩管理系统 要能运行有注释的代码 要求如下

JNero 2012-12-19 09:03:40
学生成绩管理系统(以下是实训报告上的具体要求)
【问题描述】 编写一个学生成绩管理系统,实现计算每个学生的总分、平均分,班级的总分、平均分,按分数高低排序。包含插入、删除、修改、查询、显示模块。
【要 求】成绩包括本学期所开设的课程(数据结构、计算机网络、数据库原理、……),采用菜单程序编写。包含插入、删除、修改、查询、显示模块。

我的专业是java,但是却遇到了C语言的问题,而我的C语言水平有限,就会一些简单的东西,指针什么的老师都没教过,但是这不影响我学java,上面的问题用java写我完全没问题,用C语言我就不太会了,我连引用什么地址符号都忘得差不多了,希望各位前辈和C语言学习好的帮忙写一个以供参考,要能运行完整的代码,最好要有注释,别在其他网站复制别人的代码,谢谢了(是采用菜单程序编写,C语言的菜单程序是啥,我晕)
...全文
1904 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JNero 2012-12-19
  • 打赏
  • 举报
回复
引用 4 楼 sundq12 的回复:
引用 3 楼 sundq12 的回复: 作为一个学生,你确实已经懒到极致了。等你工作了,升级交给你个任务,要求用c语言,难道你会说:“对不起,我只会java。”,到那个公司都会把你炒了。
我知道你们看不起这样的学生 拿父母的钱不好好学习 我虽然不怎么样 但是我已经很努力的学java了 之前做的都java项目 这个C语言是临时发给我们的 那个数据结构老师只能看懂C语言 下午就要交上去 都说人要随时准备 我想这是给我一个教训 我承认没有考虑全 没有准备好
oppo11 2012-12-19
  • 打赏
  • 举报
回复
#include "stdio.h" /*标准输入输出函数库*/ #include "stdlib.h" /*标准函数库*/ #include "string.h" /*字符串函数库*/ #include "conio.h" /*屏幕操作函数库*/ #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" #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 num[10]; /*学号*/ char name[15]; /*姓名*/ int cgrade; /*C语言成绩*/ 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类型的指针变量*/ void menu() /*主菜单*/ { system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ cprintf(" The Students' 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"); 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("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n"); getchar(); } void Nofind() /*输出未查找此学生的信息*/ { printf("\n=====>Not find this student!\n"); } void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/ { Node *p; p=l->next; /*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=p->next; /*移动直下一个结点*/ printf(HEADER3); } getchar(); } 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 n[255]; do{ printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens)printf("\n exceed the required length! \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 score must in [0,100]! \n"); /*进行分数校验*/ }while(t>100 || t<0); return t; } /*增加学生记录*/ void Add(Link l) { Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/ char ch,flag=0,num[10]; 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,"input number(press '0'return menu):"); /*格式化输入学号并检验*/ 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("=====>The number %s is not existing,try again?(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 allocate memory failure "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ } strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/ stringinput(p->data.name,15,"Name:"); p->data.cgrade=numberinput("C language Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/ p->data.mgrade=numberinput("Math Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/ p->data.egrade=numberinput("English Score[0-100]:"); /*输入并检验分数,分数必须在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; p->next=NULL; /*表明这是链表的尾部结点*/ r->next=p; /*将新建的结点加入链表尾部中*/ r=p; saveflag=1; } return ; } void Qur(Link l) /*按学号或姓名,查询学生记录*/ { int select; /*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/ char searchinput[20]; /*保存用户输入的查询内容*/ Node *p; if(!l->next) /*若链表为空*/ { system("cls"); printf("\n=====>No student record!\n"); getchar(); return; } system("cls"); printf("\n =====>1 Search by number =====>2 Search by name\n"); printf(" please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按学号查询*/ { stringinput(searchinput,10,"input the existing student number:"); p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/ if(p) /*若p!=NULL*/ { printheader(); printdata(p); printf(END); printf("press any key to return"); getchar(); } else Nofind(); getchar(); } else if(select==2) /*按姓名查询*/ { stringinput(searchinput,15,"input the existing student name:"); p=Locate(l,searchinput,"name"); if(p) { printheader(); printdata(p); printf(END); printf("press any key to return"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } /*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/ void Del(Link l) { int sel; Node *p,*r; char findmess[20]; if(!l->next) { system("cls"); printf("\n=====>No student record!\n"); getchar(); return; } system("cls"); Disp(l); printf("\n =====>1 Delete by number =====>2 Delete by name\n"); printf(" please choice[1,2]:"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"input the existing student number:"); 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=====>delete success!\n"); getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) /*先按姓名查询到该记录所在的节点*/ { stringinput(findmess,15,"input the existing student name"); p=Locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); ...... 代码在这里: http://www.ezloo.com/2008/10/c_mark_management.html
JNero 2012-12-19
  • 打赏
  • 举报
回复
引用 2 楼 MagicFuzzX 的回复:
别天真了,你以为这些前辈闲的蛋疼为了100积分,帮你做作业,而且说话这么拽
我说话很拽了吗 我都说我不会C语言 我也没吹自己是大神 我java写很3年了 用java做上面的问题 我确实没问题 而C语言不用确实忘得差不多了 如果你不会写 对这帖子很讨厌 你略过就好了 干嘛还要进来看 你是闲的蛋痛吧 想找点分赚 但这帖子又无分可赚 这个是数据结构实训 那个老师只能看懂C语言 我用java写 她不允许 我也没办法
zhouxf_cn 2012-12-19
  • 打赏
  • 举报
回复
计算机网络 socket 数据库 sqlite3
sundq12 2012-12-19
  • 打赏
  • 举报
回复
引用 3 楼 sundq12 的回复:
作为一个学生,你确实已经懒到极致了。
等你工作了,升级交给你个任务,要求用c语言,难道你会说:“对不起,我只会java。”,到那个公司都会把你炒了。
sundq12 2012-12-19
  • 打赏
  • 举报
回复
作为一个学生,你确实已经懒到极致了。
MagicFuzzX 2012-12-19
  • 打赏
  • 举报
回复
别天真了,你以为这些前辈闲的蛋疼为了100积分,帮你做作业,而且说话这么拽
newtee 2012-12-19
  • 打赏
  • 举报
回复
我可以帮你吃饭吗?
c学生成绩管理系统.rar
这次的课程设计和以往写的程序比起来,无论是在篇幅和复杂度上都提高了不少,我在写这个程序的过程中,遇到了不少的困难,也积累了不少的知识和经验,特别是在以前的时候我倍感头疼的文件部分,我也有了一定的了解,我想这对我今后的学习和工作是十分有益的。在这里我特意将在我在写程序过程中的体验和要注意的问题总结如下:
一. 基础知识一定要牢固。
在调试程序的过程中,有时候程序出了错误,找了半天找不到在哪里。这个时候往往会感觉十分不耐烦,但往往越是一些很小的小错误,越是往往容易被人疏漏,诸如“print”啦,注释引号括号不成对出现,遗漏scanf函数中的&符号等等,而这些却可能导致整个程序不运行,从而浪费了不少的时间。等到发现时,只会郁闷不已。因此,对于一个合格的程序员来说,牢固的基础知识是十分重要的。我们虽然没有必要达到那么高的要求,但牢固的基础知识对于程序的熟练编写和时间的节省也是大有裨益的。
二.调试程序的过程中,经验的积累和技巧的掌握是必要的。
在这次的课程设计中,由于要编写的程序的篇幅较大,因此不可避免地出现了相当多的错误,调试程序花了我不少的时间。我发现调试程序是有规律和技巧可寻的。/**/注释符号的灵活运用提供了较大的空间。通过程序的分块屏蔽可以很容易地找出错误的所在。函数的运用也是很自然的。因为有时一个临时的功能函数可以让我们很直观地知道一段程序是否正确。当然,有时,错误提示信息可以直接提供错误的所在,但是C语言自动查找错误的功能毕竟是有限的,大多数情况之下,我们还是必须要依靠自己。这时,经验就显的很重要了,我们在平时编写程序时,应多注意有意识地积累一些,会有好处的。
三.务求简单
我在编写程序的过程中发现,在某一个功能多个算法可以实现的时候,最好采用最简单的方案,这样可以减少出错的几率,也可以省去不少的麻烦。在我的程序中,有一个例子,可以很好地说明这个问题:在编写score_research()函数的时候,有一个地方可以用排序算法实现,也可以用一个标志变量加101然后在函数的末尾处再减101,这样大大地简化了程序,但是运算量也明显地加大了。然而计算机硬件已经发展到今天这个地步,对于我们写的这种小程序,计算速度已经不是问题,因此,务求简单,减少出错率才是正确的选择。
四.函数的运用和程序的模块化。
在这次课程设计里,我终于体会到了模块化带来的方便和优越。通过模块化处理,将最初的程序的功能构想以函数的形式划分成几个模块,模块下再设子模块,一层一层直到程序的功能实现为止。这样,不仅程序易于编写,还易于维护。最重要的是,如果程序出错,还易于查找和修改。
以上是我在程序的编写过程中的一点心得和体会,虽然很肤浅,但毕竟是通过自己的亲身实践得来的,感受较深。

另外,在程序的操作中还有一些需要注意的问题,主要有以下几点:
一.输入数据时,也就是在执行input()和input_2()函数的时候,一定要注意按照程序提供的输入顺序输入数据,否则极有可能导致文件的输入错误;还有,由于学生基本情况文件和成绩文件是由input()和input_2()两个函数先后完成的,所以在输入时一定要注意前后相同学生的姓名一定要相应地一致。如果输入了不同的姓名,虽然不会导致程序出错,但对于程序的结果来说,却是逻辑上的一个大大的错误。
二.为了使程序的操作更加简便,人性,我在程序中有加进了一个view_two()函数,目的是为了使程序每执行完一项功能之后,都能出现菜单以供选择,可以非常方便地执行下一个功能。另外,在view_two()函数和view()函数中,我还设置了exit()子函数。执行这个函数,便可以直接返回原代码界面。操作者若是在操作中注意到了这些,将会使操作简单不少。
三.当然,不可避免地,由于我的程序大部分是在机房编写和调试完成,时间相对较紧张,再加上我本来就对C语言没有精深的钻研和琢磨,因此程序写得相当粗糙,在有些功能的实现上,只是将其功能大致完成,并未考虑到操作的简便化等问题。例如在input()和input_2()函数的执行中,本来每个学生的基本情况和成绩应该是在一起输入的,这样才符合一般人的正常思路,但由于学生的基本情况和成绩是由两个函数分别执行完成的,姓名需要输入两次才能将学生的姓名输入到两个结构体中,因为姓名是存储在字符数组里面的,所以用一般的赋值语句是解决不了的。我只好采用了一个原始的办法,把两个结构体里的姓名分别用两个输入语句实现。但这样又导致了另外一个问题,即两次姓名的输入如果不相同时所导致的错误,而且这个问题在学生的数量越多即两次输入离得越远时表现得越突出,但我也想不出更好的办法来解决这个问题了。

通过这次做课程设计,我感觉我学到了不少的东西,尤其是耐心的培养和在宏观上组织问题的能力让我受益非浅。这不仅是设计程序所必需的,也是今后的学习和工作所不可缺少的。希望我能在这次课程设计的基础上,继续学习更多的C语言的知识,使自己的编程能力更上一层楼。
C语言程序设计》 课程设计报告 专 业: 自动化 班 级: 姓 名: 指导教师: 二0 一二年 十二月 二十日 《C语言程序设计》课程设计任务书 适用班级:电子信息工程、电子信息科学与技术、自动化、通信工程2011级 起止时间:2012年12月17日~2012年12月28日 一、设计题目:学生成绩管理系统 二、设计目的 1、熟练掌握C语言课程中所学的理论知识; 2、通过综合C语言的基本知识来解决实际问题; 3、加强分析和解决问题的能力。 三、设计内容 设计包含N个学生的数据信息的学生成绩管理系统,包括以下信息: 学号 — num[10](字符串)、 姓名(拼音)— name[25](字符串)、 性别 — sex(字符,M或F)、 年龄 — age 三门课程成绩(高数、英语、计算机)— score [3](整型)。 系统功能包括: 1、系统以菜单方式工作,密码登陆。 2、学生信息的录入(增加数据)。用数组数据类型赋初值的方法或从键盘输入的方法把 学生的数据送到各个数组中(注意要是合法数据),然后把它们输出显示。 3、学生信息的删除(删除数据)。任意输入一位学生的学号,将它所有的信息从数组中 删除。 4、学生信息的浏览(查找数据)。任意输入一位学生的学号,打印出他的所有数据。要 求能多次查找。 5、学生信息的修改(修改数据)。任意输入一位学生的学号,打印出所有相关信息后, 可对某一项信息进行修改并保存。 6、学生信息的计算并排序。计算每个学生三门课程的总分(sum,整型)及平均分(av er,单精度,输出一位小数),将包括所有数据的数组元素按总分从大到小的顺序排序 打印出来。 四、设计步骤 1、需求分析:对系统的应实现的功能进行分析。 2、概要设计:对系统功能进行模块分解,对模块的功能及模块之间的相互关系进行说明 (如用到函数,则对函数间的接口进行说明),对系统使用的数据结构(各数组、主要 变量的设置及其代表的含义)进行说明。 3、详细设计:用流程图、伪代码等方法对各主要算法进行描述。 4、编写代码:根据设计编写。源程序要按照程序的格式规范来编写要求结构清晰,界 面友好,关键部分有必要的注释。 5、调试分析:准备充分的测试数据对系统进行调试(对错误的数据输入也要进行测试, 保证程序的容错性),并通过测试对系统提出改进设想。 五、上交材料要求 上交的材料应包括系统源代码电子版、课程设计报告材料电子文档及打印件各一份。系 统源代码电子版命名为"班级_学号_姓名.c"。课程设计报告电子版命名为"班级_学号_姓 名.doc"。 课程设计报告应包含封面、目录、任务书、课程设计报告主体内容、封底。课程设计报 告格式应严格符合《课程设计报告格式》的要求(字体和排版均不得随意改变),其中正 文的字数一般不少于3000字(不含源代码)。参考文献、注释必须符合学术论文的格式 要求。 课程设计报告还可包括:课程设计过程的收获、遇到的问题、解决问题的方法或手段, 对解决问题过程的思考、程序调试能力的思考,对C语言这门课程的思考,在课程设计过 程中对《C语言》课程的认识等内容。 六、设计安排 本课程设计的指导时间为第17周周一至周五和第18周周一至周五,每个班每天8节课。第 18周周五对系统进行检查和验收,次周一提交相关材料。 本课题可由5- 6人组成的课题小组协作完成。组员间应对设计、各模块编程、撰写文档、测试等任务有 明确分工,并在项目开始时有合理的进度计划,确保课题的顺利完成。提交的课程设计 报告必须每人一份,其中必须单列对自己所负责部分的说明,包括任务内容、完成的方 法、进行过程中遇到的问题及解决方案、完成情况等。 七、成绩考核与评定 课程设计最后成绩由指导教师根据学生完成任务的情况、课程设计报告的质量和课程设 计过程中的态度等综合评分。成绩评定实行优秀、良好、中等、及格和不及格五个等级 。不及格者不能得到相应的学分,需要重新做课程设计,经指导教师考核及格后,方可 取得相应的学分。评分标准如下: 优:系统功能完善,程序界面友好,有很强的实用性和良好的可扩展性,报告格式正 确、各环节内容充实准确,并对系统提出有益的改进建议。 良:系统功能较完善,程序界面清晰,有较强实用性,报告格式正确,各环节内容完 整。 中:系统功能基本完善,程序能正常运行,有一定的实用性,报告内容完整。 及格:系统具备重要功能,程序主要模块能正常运行,报告内容完整。 不及格:系统未实现重要功能,或程序不能正常运行,或报告内容不完整。 1、设计的目的 1)复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握; 2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主 设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力; 3)培养学生在项目开发

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧