c/c++学生成绩管理系统

**感觉自己将来要做程序员了,所以来CSDN把自己在学习过程中编的东西记录下来。
第一个程序是C语言实训的程序----学生成绩管理系统。**
Copyright ©Rushierer
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 60
typedef struct student
{
    char num[10];       /*学号*/
    char name[15];      /*姓名*/
    int cgrade;         /*C语言成绩*/
    int mgrade;         /*数学成绩*/
    int egrade;         /*英语成绩*/
    int total;          /*总分*/
    float ave;          /*平均分*/
    int mingci;         /*名次*/
}STUDENT;
typedef struct date
{
    int n;              /*统计数据个数*/
}DATE;
void showMenu();                                      /*仅显示菜单*/
void Menu(STUDENT stu[],int n,DATE date[]);           /*显示主菜单*/
void showdate(STUDENT stu[],int n,DATE date[]);       /*只显示数据*/
void inputRecorde(STUDENT stu[],int n,DATE date[]);   /*从键盘输入数据*/
void displayRecord(STUDENT stu[],int n,DATE date[]);  /*显示所有数据*/
void deleteRecorde(STUDENT stu[],int n,DATE date[]);  /*删除数据*/
void searchRecorde(STUDENT stu[],int n,DATE date[]);  /*查找数据*/
void numsearch(STUDENT stu[],int n,DATE date[]);      /*按学号查找*/
void namesearch(STUDENT stu[],int n,DATE date[]);     /*按姓名查找*/
void modifyRecorde(STUDENT stu[],int n,DATE date[]);  /*修改数据*/
void insertRecorde(STUDENT stu[],int n,DATE date[]);  /*插入数据*/
void sortRecorde(STUDENT stu[],int n,DATE date[]);    /*排列数据*/

int main()
{
    int choice;
    STUDENT stu[N];
    DATE date[1];
    showMenu();
    stu[0].total=0;
    stu[0].ave=0;
    printf("请输入选项(0~7):");
    scanf("%d",&choice);
    printf("\n");
    if(choice==1)
    {
    printf("请输入要记录的学生人数:");
    scanf("%d",&date[0].n);
    }
    else if(choice==0)
        choice=0;
    else
    {
        printf("当前没有记录的数据,请录入数据!\n");
        printf("\n");
        printf("请输入要录入的学生人数:");
        scanf("%d",&date[0].n);
        choice=1;
    }
    switch(choice)
    {
        case 1:
            system("cls");
            inputRecorde(stu,date[0].n,date);break;
        case 0:
            exit(0);break;
    }
    return 0;

}

/*显示主菜单Menu*/
void showMenu()
{
    printf("       The Students'Grade Management System     \n");
    printf("  *********************Menu*********************\n");
    printf("  *                                            *\n");
    printf("  *   1 input  record       2 display record   *\n");
    printf("  *   3 delete record       4 search  record   *\n");
    printf("  *   5 modify record       6 insert  record   *\n");
    printf("  *   7 sort   record       0 quit    system   *\n");
    printf("  *                                            *\n");
    printf("  **********************************************\n");
}
/*显示菜单2*/
void Menu(STUDENT stu[],int n,DATE date[])
{
    int choice;
    showMenu();
    printf("请输入选项(0~7):");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:
            system("cls");
            inputRecorde(stu,n,date);break;
        case 2:
            system("cls");
            displayRecord(stu,n,date);break;
        case 3:
            system("cls");
            deleteRecorde(stu,n,date);break;
        case 4:
            system("cls");
            searchRecorde(stu,n,date);break;
        case 5:
            system("cls");
            modifyRecorde(stu,n,date);break;
        case 6:
            system("cls");
            insertRecorde(stu,n,date);break;
        case 7:
            system("cls");
            sortRecorde(stu,n,date);break;
        case 0:
            exit(0);break;
    }
}


/*从键盘输入成绩input*/
void inputRecorde(STUDENT stu[],int n,DATE date[])
{
    int i=0,j;
    system("cls");
    printf("                   Input record                      \n");
    printf("*****************************************************\n");
    printf("\n");
    printf("数据录入格式提示:\n");
    printf("1.数据内容:学号、姓名、c语言成绩、数学成绩、英语成绩\n");
    printf("2.数据间以空格做间隔,最后回车录入数据结束\n");
    printf("\n");
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个学生的数据:",i+1);
        scanf("%s",stu[i].num);
        scanf("%s",stu[i].name);
        scanf("%d",&stu[i].cgrade);
        scanf("%d",&stu[i].mgrade);
        scanf("%d",&stu[i].egrade);
    }
    printf("\n");
    printf("数据录入完成!\n");
    printf("\n");
    printf("1查看录入的信息  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
       case 1:
            printf("\n");
            displayRecord(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }
}


/*显示所有数据display*/
void displayRecord(STUDENT stu[],int n,DATE date[])
{
    int i,j;
    printf("                   Display record                    \n");
    printf("*****************************************************\n");
    printf("所有数据:\n");
    printf("\n");
    printf("      学号          姓名    c语言  数学   英语\n");
    for(i=0;i<n;i++)
    {
    printf("%10s%15s%6d%7d%7d\n",stu[i].num,
                                stu[i].name,
                                stu[i].cgrade,
                                stu[i].mgrade,
                                stu[i].egrade);
    }
    printf("\n");
    printf("1返回主菜单  0退出:");
    scanf("%d",&j);
    if(j==1)
    {
        system("cls");
        Menu(stu,n,date);
    }
    else
        exit(0);
}

/*只显示数据show*/
void showdate(STUDENT stu[],int n,DATE date[])
{
    int i;
    printf("已录入的数据:\n");
    printf("\n");
    printf("      学号          姓名    c语言  数学   英语\n");
    for(i=0;i<n;i++)
    {
        printf("%10s%15s%6d%7d%7d\n",stu[i].num,
                                    stu[i].name,
                                    stu[i].cgrade,
                                    stu[i].mgrade,
                                    stu[i].egrade);
    }

}



/*删除记录delete*/
void deleteRecorde(STUDENT stu[],int n,DATE date[])
{
    int i,k,j;
    printf("                   Delete record                     \n");
    printf("*****************************************************\n");
    printf("\n");
    showdate(stu,n,date);
    printf("已经录入%d个学生的信息,你想删除第几个的记录:",n);
    scanf("%d",&k);
    i=k-1;
    for(;i<=n-2;i++)
    {
        strcpy(stu[i].num,stu[i+1].num);
        strcpy(stu[i].name,stu[i+1].name);
        stu[i].cgrade=stu[i+1].cgrade;
        stu[i].mgrade=stu[i+1].mgrade;
        stu[i].egrade=stu[i+1].egrade;
    }
    printf("\n");
    printf("已成功删除!\n");
    date[0].n=date[0].n-1;
    n=n-1;
    printf("\n");
    printf("1显示修改后的信息  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
       case 1:
            printf("\n");
            displayRecord(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }
}

/*查找功能search*/
void searchRecorde(STUDENT stu[],int n,DATE date[])
{
    int k;
    printf("                   Search record                     \n");
    printf("*****************************************************\n");
    printf("\n");
    printf("查找方式:1.按学号查找 2.按姓名查找\n");
    printf("请选着查找方式(1/2):");
    scanf("%d",&k);
    printf("\n");
    if(k==1)
    {
        numsearch(stu,n,date);
    }
    else
    {
        namesearch(stu,n,date);
    }
}

/*按学号查找*/
void numsearch(STUDENT stu[],int n,DATE date[])
{
    int i,j,k=0;
    char num1[10];
    printf("请输入想查找的学号:");
    scanf("%s",num1);
    printf("\n");
    printf("查找结果:");
    printf("\n");
    for(i=0;i<n;i++)
    {
        if(strcmp(stu[i].num,num1)==0)
        {
            printf("%10s%15s%4d%4d%4d\n",stu[i].num,
                                        stu[i].name,
                                        stu[i].cgrade,
                                        stu[i].mgrade,
                                        stu[i].egrade);
            k+=1;
        }
    }
    if(k==0)
        printf("输入的学号不存在或格式不对!\n");
    printf("\n");
    printf("1重新查询  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
        case 1:
            system("cls");
            searchRecorde(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }
}


/*按姓名查找*/
void namesearch(STUDENT stu[],int n,DATE date[])
{
    int i,j,k=0;
    char name1[15];
    printf("请输入想查找的姓名:");
    scanf("%s",name1);
    printf("\n");
    printf("查找结果:");
    printf("\n");
    for(i=0;i<n;i++)
    {
        if(strcmp(stu[i].name,name1)==0)
        {
            printf("%10s%15s%6d%7d%7d\n",stu[i].num,
                                        stu[i].name,
                                        stu[i].cgrade,
                                        stu[i].mgrade,
                                        stu[i].egrade);

            k+=1;
        }
    }
    if(k==0)
        printf("输入的学号不存在或格式不对!\n");
    printf("\n");
    printf("1重新查询  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
       case 1:
            system("cls");
            searchRecorde(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }
}

/*修改记录modify*/
void modifyRecorde(STUDENT stu[],int n,DATE date[])
{
    int i,k,j;
    char num[10];       /*学号*/
    char name[15];      /*姓名*/
    int cgrade;         /*C语言成绩*/
    int mgrade;         /*数学成绩*/
    int egrade;         /*英语成绩*/
    printf("                   Modify record                     \n");
    printf("*****************************************************\n");
    printf("\n");
    showdate(stu,n,date);
    printf("\n");
    printf("已经录入%d个学生的信息,你想修改第几个学生的记录:",n);
    scanf("%d",&k);
    if(k>n||k<=0)
    {
        printf("\n");
        printf("输入错误,无这条记录!\n");
        printf("请重新输入你想修改第几个学生的记录:");
        scanf("%d",&i);
        k=i;
    }
    printf("\n");
    printf("请输入修改后的信息:");
    scanf("%s",num);
    scanf("%s",name);
    scanf("%d",&cgrade);
    scanf("%d",&mgrade);
    scanf("%d",&egrade);
    strcpy(stu[k-1].num,num);
    strcpy(stu[k-1].name,name);
    stu[k-1].cgrade=cgrade;
    stu[k-1].mgrade=mgrade;
    stu[k-1].egrade=egrade;
    printf("\n");
    printf("修改完成!\n");
    printf("\n");
    printf("1显示修改后的信息  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
       case 1:
            printf("\n");
            displayRecord(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }

}

/*插入数据insert*/
void insertRecorde(STUDENT stu[],int n,DATE date[])
{
    int i,k,j;
    char num[10];       /*学号*/
    char name[15];      /*姓名*/
    int cgrade;         /*C语言成绩*/
    int mgrade;         /*数学成绩*/
    int egrade;         /*英语成绩*/
    printf("                   Insert record                     \n");
    printf("*****************************************************\n");
    printf("\n");
    showdate(stu,n,date);
    printf("\n");
    printf("你想在第几个数据之后插入数据:");
    scanf("%d",&k);
    if(k>n||k<=0)
    {
        printf("\n");
        printf("输入错误!\n");
        printf("请重新输入你想在第几个数据之后插入数据:");
        scanf("%d",&i);
        k=i;
    }
    printf("\n");
    printf("请输入插入的信息:");
    scanf("%s",num);
    scanf("%s",name);
    scanf("%d",&cgrade);
    scanf("%d",&mgrade);
    scanf("%d",&egrade);
    for(i=n;k+1<=i;i--);
    {
        strcpy(stu[i].num,stu[i-1].num);
        strcpy(stu[i].name,stu[i-1].name);
        stu[i].cgrade=stu[i-1].cgrade;
        stu[i].mgrade=stu[i-1].mgrade;
        stu[i].egrade=stu[i-1].egrade;
    }
    strcpy(stu[k].num,num);
    strcpy(stu[k].name,name);
    stu[k].cgrade=cgrade;
    stu[k].mgrade=mgrade;
    stu[k].egrade=egrade;
    date[0].n=date[0].n+1;
    n=n+1;
    printf("\n");
    printf("插入完成!\n");
    printf("\n");
    printf("1显示修改后的信息  2返回主菜单  0退出:");
    scanf("%d",&j);
    switch(j)
    {
       case 1:
            printf("\n");
            displayRecord(stu,n,date);break;
        case 2:
            system("cls");
            Menu(stu,n,date);break;
        case 0:
            exit(0);break;
    }

}

/*对数据排序sort*/
void sortRecorde(STUDENT stu[],int n,DATE date[])
{
    int i,j;
    STUDENT temp;
    printf("                    Sort record                      \n");
    printf("*****************************************************\n");
    printf("\n");
    showdate(stu,n,date);
    printf("\n");
    printf("排序后的数据:\n");
    for(i=0;i<n;i++)
    {
        stu[i].total=stu[i].cgrade+stu[i].mgrade+stu[i].egrade;
        stu[i].ave=(float)stu[i].total/3;
    }
    for(j=1;j<n;j++)
        for(i=0;i<n-j;i++)
        if(stu[i].total>stu[i+1].total)
        {
            temp=stu[i];
            stu[i]=stu[i+1];
            stu[i+1]=temp;
        }
    printf("\n");
    printf("      学号          姓名    c语言  数学   英语  平均分   总分   名次\n");
    j=0;
    for(i=n-1;i>-1;i--)
    {
        j++;
        printf("%10s%15s%6d%7d%7d%8.2f%7d%7d\n",stu[i].num,
                                            stu[i].name,
                                            stu[i].cgrade,
                                            stu[i].mgrade,
                                            stu[i].egrade,
                                            stu[i].ave,
                                            stu[i].total,
                                            j);
    }
    printf("\n");
    printf("1返回主菜单  0退出:");
    scanf("%d",&j);
    if(j==1)
    {
        system("cls");
        Menu(stu,n,date);
    }
    else
        exit(0);
}   

转载请咨询作者本人。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
相当不错的一个成绩管理系统 #include #include #include #include using namespace std; enum {SUBJECT=5};//一共五门 typedef struct { char subject[10];//科目名称 int score;//科目成绩 }markinfo; typedef struct studentnode { markinfo mark[SUBJECT]; int totalmark; char name[10];//学生姓名 studentnode * next; }studentnode; class student { studentnode * head; public: student(); int addstudent(); ~student(); int countmark(); int sortbymark(); int save(); int show(); int display(); int readfiletolist(); int searchbyname(); }; student::student() //用构造函数来初始化。 { head=new studentnode; head->next=NULL; } //1.输入学生姓名、成绩等数据,并保存在链表中。 int student::addstudent() { studentnode * p; int i; char check; system("cls"); cout<<"**********************"<<endl; cout<<"请输入学生信息:"<<endl; do { p=new studentnode; cin.ignore(); cout<name); i=0; p->totalmark=0; do { cout<mark[i].subject); cout<>p->mark[i].score; } while(p->mark[i].score>100||p->mark[i].scoretotalmark=p->totalmark+p->mark[i].score; getchar(); } while(++i!=SUBJECT); if(head->next==NULL) { head->next=p;p->next=NULL; } else { p->next=head->next; head->next=p; } cout<next; if(p==NULL) { cout<<"没有学生,请重新输入"<<endl;system("pause");return 0; } else { cout<<"***************"<<endl; cout<<"学生成绩汇总:"<<endl; while(p) { cout<<"姓名:"<name<<" 总成绩:"<totalmark<next; } } system("pause"); return 0; } //4.输出所有学生成绩到一个文件中。 int student::save() { char address[35]; int i; studentnode * p=head->next; cout<<"请输入保存的地址"<<endl; cin.ignore(); gets(address); ofstream fout; fout.open(address,ios::app|ios::out); while(p) { fout<<"*"; fout<name<<"*"; i=0; while(i!=SUBJECT) { fout<mark[i].subject<<"*"; fout<mark[i].score; i++; } //fout<next; } fout.flush(); fout.close(); cout<next; while(p) { s=p->next; delete p; p=s; } delete head; } //3.按照总成绩大小对记录进行排序 int student::sortbymark() { studentnode *move1=head->next; studentnode *move2,*max,*pre1,*pre2,*maxpre,*s=move1; if(head->next==NULL) { cout<<"没有记录,请添加"<next!=NULL;pre1=move1,maxpre=pre1,move1=move1->next,max=move1) { for(pre2=move1,move2=move1->next;move2!=NULL;pre2=move2,move2=move2->next) if(move2->totalmark>max->totalmark) { maxpre=pre2; max=move2; } if(move1->next==max) //交换max和move1。 { pre1->next=max; move1->next=max->next; max->next=move1; move1=max; } else { s=move1->next; move1->next=max->next; max->next=s; maxpre->next=move1; pre1->next=max; move1=max; } } cout<<"已经按照从大到小排序"<next; int i; if(head->next==NULL){cout<<"没有学生记录,请添加"<<endl;system("pause"); return 0;} else { while(p) { cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<next; } } system("pause"); return 0; } //6:从文件按读取记录 int student::display() { ifstream fin; char buf[100]; char str[25]; cout<<"请输入路径及文件名:"<<endl; cin.ignore(); gets(str); fin.open(str); if(!fin) { cout<<"没有此文件"<<endl; system("pause"); return 0; } while(fin) { fin.getline(buf,sizeof(buf)); cout<<buf<<endl; } system("pause"); return 0; } //8从文件中读取数据,并将数据保存在链表中 int student::readfiletolist() { ifstream fin; int i; char str[25]; cout<<"请输入路径及文件名:"<<endl; cin.ignore(); gets(str); fin.open(str); if(!fin) { cout<<"没有此文件"<totalmark=0; fin.getline(p->name,100,'*'); i=0; while(i!=SUBJECT) { fin.getline(p->mark[i].subject,100,'*'); fin>>p->mark[i].score; p->totalmark+=p->mark[i].score; i++; } if(head->next==NULL) { head->next=p; p->next=NULL; } else { p=head->next; head->next=p; } } cout<<"信息已经保存在链表中"<next==NULL) { cout<<"没有学生,请添加或者从文件中读取"<next; char findname[10]; int i; cout<name,findname)) { cout<<"经查找,找到该生信息如下:"<<endl<<endl; cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<next; } cout<<"没有此学生,请添加或者从文件中读取"<<endl; system("pause"); return 0; } int showmenu() { int choice; char * menu[9]={ "1:输入学生成绩保存到链表\n", "2:计算每位学生总成绩\n", "3:按照总成绩大小对记录进行排序\n", "4:输出所有学生成绩到一个文件中\n", "5:显示新输入的学生信息\n", "6:从文件中读取信息\n", "7:将文件信息保存在链表中\n", "8:根据姓名查找学生记录\n", "9:结束程序\n" }; cout<<" "<<"*****************************************************"<<endl; cout<<" *"<<" "<<"学生成绩管理系统"<<" *"<<endl; cout<<" "<<"*****************************************************"<<endl; for(choice=0;choice<9;choice++) cout<<" "<<menu[choice]; cout<<" "<<"*****************************************************"<<endl; cout<<"please choose to continue"<>choice; } while(choice>9||choice<1); return choice; } int main() { int menuitem,flag=1; student stu; while(flag) { system("cls"); menuitem=showmenu(); switch(menuitem) { case 1:{stu.addstudent();break;} case 2:{stu.countmark();break;} case 3:{stu.sortbymark();break;} case 4:{stu.save();break;} case 5:{stu.show();break;} case 6:{stu.display();break;} case 7:{stu.readfiletolist();break;} case 8:{stu.searchbyname();break;} case 9:{flag=0;break;} } } return 0; }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值