⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 源程序.cpp

📁 一个数据结构的课程设计文件,VC++编写.内容为:又一个成绩管理系统
💻 CPP
字号:

#include<stdio.h>                   /*引用库函数*/

#include<stdlib.h>

#include<ctype.h>

#include<string.h>

 

typedef struct                /*定义结构体数组*/

{

                    char num[10];               /*学号*/

                    char name[20];              /*姓名*/

                    int score;             /*成绩*/

}Student;

Student stu[80];             /*结构体数组变量*/

 

int menu_select()           /*菜单函数*/

{

                    char c;

                    do{

                             system("cls");              /*运行前清屏*/

                             printf("\t\t************学生成绩管理系统************\n");            /*菜单选择*/

                             printf("\t\t    1. 输入记录             \n");

                             printf("\t\t    2. 显示所有记录                \n");

                             printf("\t\t    3. 按学号排序                                   \n");

                             printf("\t\t    4. 插入一条记录                \n");

                             printf("\t\t    5. 按姓名查找,删除一条记录            \n");

                             printf("\t\t    6. 查找并显示一条记录                    \n");

                             printf("\t\t    7. 输出统计信息                \n");
                             printf("\t\t    8. 将所有数据写入文件中         \n");                                        printf("\t\t    0. 退出程序                            \n");
                             printf("\t\t*****************************************\n");
                             printf("\t\t\t请选择(0-8):");
c=getchar();                  /*读入选择*/

                    }while(c<'0'||c>'8');

                    return(c-'0');                  /*返回选择*/

}

 

int Input(Student stud[],int n)                  /*输入若干条记录*/

{int i=0;

 char sign,x[10];            /*x[10]为清除多余的数据所用*/

 while(sign!='n'&&sign!='N')          /*判断*/

 {

                     printf("\t\t\t学号:");                 /*交互输入*/

                     scanf("\t\t\t%s",stud[n+i].num);

                     printf("\t\t\t姓名:");

                     scanf("\t\t\t%s",stud[n+i].name);

                     printf("\t\t\t成绩:");

                     scanf("\t\t\t%d",&stud[n+i].score);

                     gets(x);              /*清除多余的输入*/

                     printf("\t\t\t更多记录?(Y/N)");

                     scanf("\t\t\t%c",&sign);                /*输入判断*/

                     i++;

 }

 return(n+i);

}

 

void Display(Student stud[],int n)            /*显示所有记录*/

{

 int i;

 printf("\t\t\t-----------------------------------\n");          /*格式头*/

 printf("\t\t\t学号        姓名         成绩\n");

 printf("\t\t\t-----------------------------------\n");

 for(i=1;i<n+1;i++)                /*循环输入*/

 {

                    printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);

                    if(i>1&&i%10==0)               /*每十个暂停*/

                             {printf("\t\t\t-----------------------------------\n");                  /*格式*/

                              printf("\t\t\t");

                              system("pause");

                              printf("\t\t\t-----------------------------------\n");

                             }

 }

 printf("\t\t\t");

 system("pause");

}

 

void Sort_by_num(Student stud[],int n)            /*按学号排序*/

{

                    int i,j,*p,*q,s;

                    char t[10];

                    for(i=0;i<n-1;i++)                  /*冒泡法排序*/

                             for(j=0;j<n-1-i;j++)

                                       if(strcmp(stud[j].num,stud[j+1].num)>0)

                                       {strcpy(t,stud[j+1].num);

                                        strcpy(stud[j+1].num,stud[j].num);

                                        strcpy(stud[j].num,t);

                                        strcpy(t,stud[j+1].name);

                                        strcpy(stud[j+1].name,stud[j].name);

                                        strcpy(stud[j].name,t);

                                        p=&stud[j+1].score;

                                        q=&stud[j].score;

                                        s=*p;

                                        *p=*q;

                                        *q=s;

                                       }

}

 

int Insert_a_record(Student stud[],int n)            /*插入一条记录*/

{char x[10];          /*清除多余输入所用*/

                    printf("\t\t\t学号:");                   /*交互式输入*/

                    scanf("\t\t\t%s",stud[n].num);

                    printf("\t\t\t姓名:");

                    scanf("\t\t\t%s",stud[n].name);

                    printf("\t\t\t成绩:");

                    scanf("\t\t\t%d",&stud[n].score);

                    gets(x);

                    n++;

                    Sort_by_num(stud,n);           /*调用排序函数*/

                    printf("\t\t\t插入成功!\n");           /*返回成功信息*/

                    return(n);

}

 

int Delete_a_record(Student stud[],int n)           /*按姓名查找,删除一条记录*/

{

                    char s[20];

                    int i=0,j;

                    printf("\t\t\t输入要删除学生姓名:");                 /*交互式问寻*/

                    scanf("%s",s);

                    while(strcmp(stud[i].name,s)!=0&&i<n) i++;           /*查找判断*/

                    if(i==n)

                             {

                              printf("\t\t\t找不到!\n");              /*返回失败信息*/

                              return(n);

                             }

                    for(j=i;j<n-1;j++)                   /*删除操作*/

                             {

                              strcpy(stud[j].num,stud[j+1].num);

                              strcpy(stud[j].name,stud[j+1].name);

                              stud[j].score=stud[j+1].score;

                             }

                    printf("\t\t\t删除成功!\n");      /*返回信息成功*/

                    return(n-1);

}

 

void Query_a_record(Student stud[],int n)                 /*查找并显示一个记录*/

{

                    char s[20];

                    int i=0;

                    printf("\t\t\t输入要查询的学生姓名:\n");      /*交互式输入*/

                    scanf("\t\t\t%s",s);

                    while(strcmp(stud[i].name,s)!=0&&i<n) i++;           /*查找判断*/

                    if(i==n)

                             {

                              printf("\t\t\t找不到!\n");              /*输入失败信息*/
                              return;

                             }

                    printf("\t\t\t该学生的学号:%s\n",stud[i].num);                /*输出该学生信息*/

                    printf("\t\t\t该学生的成绩:%d\n",stud[i].score);

}

Statistic(Student stud[],int n)            /*输出统计信息*/

{

                    int i,j=0,k=0,sum=0;

                    float aver;            /*成绩平均值*/

                    for(i=0;i<n;i++)            /*循环输入判断*/

                             {

                              sum+=stud[i].score;

                              if(stud[j].score>stud[i].score) j=i;

                              if(stud[k].score<stud[i].score) k=i;

                             }

                    aver=1.0*sum/n;

                    printf("\t\t\t一共有%d记录.\n",n);            /*总共记录数*/
                    printf("\t\t\t最低分:\n");          /*最低分*/ 

                    printf("\t\t\t学号:%s  姓名:%s  成绩:%d\n",stud[j].num,stud[j].name,stud[j].score);

                    printf("\t\t\t最高分:\n");            /*最高分*/

                    printf("\t\t\t学号:%s   姓名:%s   成绩:%d\n",stud[k].num,stud[k].name,stud[k].score);

                    printf("\t\t\t平均分: %5.2f\n",aver);                  /*平均分*/

} 

void WritetoText(Student stud[],int n)               /*将所有记录写入文件*/

{

 int i=0;

 FILE *fp;           /*定义文件指针*/

 char filename[20];                 /*定义文件名*/

                    printf("\t\t\t将所有记录写入文件\n");             /*输入文件名*/

                    printf("\t\t\t输入文件名:");

                    scanf("\t\t\t%s",filename);

                    if((fp=fopen(filename,"w"))==NULL)             /*打开文件*/

                             {

                                       printf("\t\t\t不能打开文件\n");

                                       system("pause");

                                       return;

                             }

                fprintf(fp,"%d\n",n);             /*循环写入数据*/

                    while(i<n)

                    {

                             fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);

                             i++;

                }

                    fclose(fp);           /*关闭文件*/

                    printf("成功!\n");          /*返回成功信息*/
}

 
void main()           /*主函数*/

{

 int n=0;

                    for(;;)

                    {

                             switch(menu_select())           /*选择判断*/

                             {

                             case 1:

                                       printf("\t\t\t输入若干条记录\n");                /*输入若干条记录*/

                                       n=Input(stu,n);

                                       break;

                             case 2:

                                       printf("\t\t\t显示所有记录\n");                /*显示所有记录*/

                                       Display(stu,n);

                                       break;

                             case 3:

                                       printf("\t\t\t排序\n");

                                       Sort_by_num(stu,n);             /*按学号排序*/

                                       printf("\t\t\t排序成功!\n");

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                             case 4:

                                       printf("\t\t\t插入一条记录\n");

                                       n=Insert_a_record(stu,n);               /*插入一条记录*/

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                             case 5:

                                       printf("\t\t\t删除一条记录\n");

                                       n=Delete_a_record(stu,n);              /*按姓名查找,删除一条记录*/

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                             case 6:

                                       printf("\t\t\t查找并显示一个记录\n");

                                       Query_a_record(stu,n);                  /*查找并显示一个记录*/

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                             case 7:

                                       printf("\t\t\t输出统计信息\n");

                                       Statistic(stu,n);             /*输出统计信息*/

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                           case 8:

                                       printf("\t\t\t写入文件\n");

                                       WritetoText(stu,n);                /*循环写入数据*/

                                       printf("\t\t\t");

                                       system("pause");

                                       break;

                             case 0:

                                       printf("\t\t\t祝你好运,再见!\n");           /*结束程序*/

                                       printf("\t\t\t");

                                       system("pause");

                                       exit(0);

                             }

                    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -