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

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

我的专业是java,但是却遇到了C语言的问题,而我的C语言水平有限,就会一些简单的东西,指针什么的老师都没教过,但是这不影响我学java,上面的问题用java写我完全没问题,用C语言我就不太会了,我连引用什么地址符号都忘得差不多了,希望各位前辈和C语言学习好的帮忙写一个以供参考,要能运行完整的代码,最好要有注释,别在其他网站复制别人的代码,谢谢了(是采用菜单程序编写,C语言的菜单程序是啥,我晕)
...全文
2243 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
  • 打赏
  • 举报
回复
我可以帮你吃饭吗?

70,038

社区成员

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

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