读书人

用C语言实现 学生管理系统(要带注解)

发布时间: 2012-04-13 13:50:24 作者: rapoo

用C语言实现 学生管理系统(要带注解)?
用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);} 


[解决办法]

C/C++ code
#include <stdio.h> //scanf,printf函数的实现在这个系统头文件里,也就是说想用scanf(),printf()就得包含这个头文件#include <string.h>//strcmp这个函数的实现在这个系统头文件里,strcmp的功能是比较两个字符串是否相等,相等则返回1,否则返回0#include <malloc.h>//malloc和free函数的实现在这个系统头文件里,#define STUDENT struct student //定义宏变量student,可以理解为就是字符串替换student=STUDENT struct#define LEN sizeof(STUDENT)//同上定义变量LEN,可以理解为就是字符串替换LEN=sizeof(STUDENT)#include <stdlib.h>//exit和system函数的实现在这个系统头文件里,也就是说想用exit(),system()就得包含这个头文件#include <conio.h>//同上,getche函数的实现在这个系统头文件里   STUDENT //定义一个结构体STUDENT{          long num; //定义long类型的变量    char name[5];//定义字符数组,其长度是5,其中下标0-3可用于存储,name[4]预留存'\0'    int math;//定义int类型的变量    int english;//意义同上    int chengxu;//意义同上    int average;//意义同上    STUDENT *next;//定义结构体类型指针,指向结构体STUDENT};int n=0; //定义全局变量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(); //定义变量select接受用户的键盘输入选择    return (select);//返回select,也就是返回用户的键盘输入选择值} 

读书人网 >C语言

热点推荐