用C语言实现 学生管理系统(要带注解)?解决方法
用C语言实现 学生管理系统(要带注解)?
用C语言实现 学生管理系统
要求:
1.能建立以班为单位的学生基础数据文件,该文件能反映各科成绩和学生的基本信息.
2.能按班并能选择任意一科成绩排序,并输出排序后的班文件.
3.能按年级并能选择任意一科成绩排序,并输出排序后的年级文件.
4.能实现查询功能.可选择名字,也可选择某一科成绩项进行查询.
5.能实现统计某学生的总成绩和平均成绩.
6.能实现统计某班同学的总成绩和平均成绩.
7.能实现统计某年级的总成绩和平均成绩.
我贴出这篇帖子关键是想学学一些编程思路,希望能有对每一条语句的解释。
谢谢各位高人出谋划策!!
------解决方案--------------------
前几天不是给你贴了一个吗?哪看不懂?
用C语言实现 学生管理系统
要求:
1.能建立以班为单位的学生基础数据文件,该文件能反映各科成绩和学生的基本信息.
2.能按班并能选择任意一科成绩排序,并输出排序后的班文件.
3.能按年级并能选择任意一科成绩排序,并输出排序后的年级文件.
4.能实现查询功能.可选择名字,也可选择某一科成绩项进行查询.
5.能实现统计某学生的总成绩和平均成绩.
6.能实现统计某班同学的总成绩和平均成绩.
7.能实现统计某年级的总成绩和平均成绩.
我贴出这篇帖子关键是想学学一些编程思路,希望能有对每一条语句的解释。
谢谢各位高人出谋划策!!
------解决方案--------------------
前几天不是给你贴了一个吗?哪看不懂?
- C/C++ code
#include <stdio.h> #include <string.h> #include <malloc.h> #define STUDENT struct student #define LEN sizeof(STUDENT) #include<stdarg.h> #include <stdlib.h> #include <conio.h> STUDENT { long num; char name[5]; int math; int english; int chengxu; int average; STUDENT *next; }; int n=0; void menu() { printf(" **************成绩管理系统**************\n"); printf(" *\t1--成绩输入\t2--显示成绩 *\n"); printf(" *\t3--成绩查询\t4--删除成绩 *\n"); printf(" *\t5--排列成绩\t6--插入成绩 *\n"); printf(" *\t0--退出 \t7--保存于文件中 *\n"); printf(" ****************************************\n"); printf("请选择(0--7):"); } char choice() { char select=getche(); return (select); } STUDENT *create() { STUDENT *head,*p1,*p2; p1=p2=(STUDENT *)malloc(LEN); scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu); p1->average=(p1->math+p1->english+p1->chengxu)/3; head=NULL; while (p1->num!=0) { n++; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(STUDENT *) malloc(LEN); scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu); p1->average=(p1->math+p1->english+p1->chengxu)/3; } p2->next=NULL; free(p1); printf("\n"); return(head); } void print(STUDENT *head)//打印成绩信息 { STUDENT *p; p=head; if(head!=NULL) { printf("\n全部成绩为:\n\n"); printf("学号\t姓名\t数学\t英语\t程序\t平均分\n\n"); do { printf("%ld\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name,p->math,p->english,p->chengxu,p->average); p=p->next; }while(p!=NULL); printf("\n"); } else printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n"); } void search(STUDENT *head,char nam[]) //根据姓名查找成绩信息 { STUDENT *p5; if(head==NULL) { printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n"); return; } p5=head; while(strcmp(p5->name,nam)&&p5->next!=NULL) p5=p5->next; if(strcmp(p5->name,nam)==0) { printf("\n该同学成绩信息为:\n\n"); printf("学号\t姓名\t数学\t英语\t程序\t平均分\n"); printf("%ld\t%s\t%d\t%d\t%d\t%d\n\n",p5->num, p5->name,p5->math,p5->english,p5->chengxu,p5->average); } else printf("\n没有找到该同学的成绩信息!\n\n"); } STUDENT *del(STUDENT *head,long num)//根据学号删除学生信息 { STUDENT *p6,*p7; if(head==NULL) { printf("\n删除失败!目前数据为空,还没有任何信息,请先创建成绩信息!\n"); return (head); } p6=head; while(num!=p6->num &&p6->next!=NULL) { p7=p6; p6=p6->next; } if(num==p6->num) { if(p6==head) head=p6->next; else p7->next=p6->next; printf ("\n已删除该名学生的成绩信息!\n"); n--; } else printf ("\n没有找到该名学生的成绩信息!\n"); return(head); } STUDENT *sort(STUDENT *head) //根据平均分排序 { STUDENT *temp,*t,*p3,*p4; temp=head; head=NULL; while(temp!=NULL) { t=temp; temp=temp->next; if(head!=NULL&&head->average<t->average) { p3=head; while(p3!=NULL&&p3->average<t->average) { p4=p3; p3=p3->next; } t->next=p3; p4->next=t; } else { t->next=head; head=t; } } return(head); } STUDENT *insert( STUDENT *head, STUDENT *stud) //根据平均分插入成绩信息 { STUDENT *p3,*p4; if(head!=NULL&&head->average<stud->average) { p3=head; while(p3!=NULL&&p3->average<stud->average) { p4=p3; p3=p3->next; } stud->next=p3; p4->next=stud; } else { stud->next=head; head=stud; } n++; return (head); } void save(STUDENT *head) //存入文件 { FILE *fp; STUDENT *p; fp=fopen("d:\\student.txt","wb"); if(fp==NULL) { printf("无法打开!"); exit(0); } p=head; while(p!=NULL) { fwrite(p,LEN,1,fp); p=p->next; } fclose(fp); } STUDENT *load() //从文件中读取 { FILE *fp; STUDENT *q,*head=NULL; fp=fopen("d:\\student.txt","rb"); if(fp==NULL) { return head; } while(!feof(fp)) { q=(STUDENT *)malloc(LEN); if(fread(q,LEN,1,fp)==1) { q->next=head; head=q; n++; } } fclose(fp); return head; } int main(int argc, char *argv[]) { STUDENT *head,*stu; long del_num; char select,nam[5]; select=0; head=load(); while(select!='0') { system("cls"); menu(); select=choice(); switch(select) { case '0': printf("\n\n您选择的是退出,欢迎您今后再次使用,再见!\n\n\n"); continue; case '1': printf("\n\n您选择的是成绩输入!\n"); printf("\n请输入成绩!\n\n"); printf("学号\t姓名\t数学\t英语\t程序\n"); head=create(); break; case '2': printf("\n\n您选择的是显示成绩!\n"); print(head); break; case '3': printf("\n\n您选择的是成绩查询!\n"); printf("\n请输入要查寻的姓名:"); scanf("%s",nam); search(head,nam); break; case '4': printf("\n\n您选择的是删除成绩!\n"); printf("\n请输入要删除同学的学号:"); scanf("%ld",&del_num); head=del(head,del_num); printf("\n"); break; case '5': printf("\n\n您选择的是排列成绩!\n"); head=sort(head); printf("\n按平均分排列后的所有成绩为:\n"); print(head); break; case '6': printf("\n\n您选择的是插入成绩!\n"); printf("\n请输入插入成绩的信息!\n"); printf("\n学号\t姓名\t数学\t英语\t程序\t平均分\n"); stu=(STUDENT *)malloc(LEN); scanf("%ld %s %d %d %d",&stu->num,stu->name,&stu->math,&stu->english,&stu->chengxu); stu->average=(stu->math+stu->english+stu->chengxu)/3; head=insert(head,stu); printf("\n"); break; case '7': printf("\n\n您选择的是在文件中保存成绩!\n"); save(head); printf("\n保存成功!\n\n"); break; default: printf("\n\n您的选择是错误的!\n\n"); } system("PAUSE"); } return (0); }