C语言|学分管理程序(大一实验)

本文档描述了一个学生学分管理程序的详细设计,包括结构体定义、文件操作和功能实现,如录入、查找、修改和显示学分信息。程序提供菜单供用户交互,确保学生完成基础课、专业课、选修课、人文类课程和实验性课程的学分要求以满足毕业条件。同时,提供了查看达到毕业要求的学生名单的功能。
摘要由CSDN通过智能技术生成

    学分管理程序:设计一个学生的学分管理程序,学生人数自定,假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分和实验性课程20学分才能够毕业。因此在管理学分时,要考虑每个学分所属于的课程类别。

该程序应该具有下列功能:

1)由键盘读入学生信息并写盘;增

2)给定学号,显示该位学生的学分完成情况;查

3)给定某位学生的学号,修改该学生的学分情况;改

4)显示所有学生的学分完成情况;

5)统计已达到毕业要求的学生名单(自选)

【要求】:

1)学分信息应该包括学号、姓名、课程类别和学分等

2)考虑设计一个菜单,其中列出程序提供的功能,用户可以自由地选择其中的某项操作。

【提示】:

1)设计一个结构体类型和存储结构,用来保存学分信息;

2)将所有学生的学分信息存储在一个文件中,并根据用户的选择实现文件的读写操作。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct students

{

       int num;//学号

       char name[20];//姓名

       int classes[5];//a[1]基础课,a[2]专业课,a[3]选修课,a[4]人文类课程,a[5]实验性课程

       int trought;//是否通过,如果通过则为1,未通过为0

}a[100000];

int Scanf()//录入学生信息并存盘

{

       FILE *f;//文件指针

       if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","w"))==NULL)//文件指针链接文件

       {

       printf(">-文件无法正常打开,程序终止-<\n");

       exit(0);

       }

       printf(">-输入 0 信息录入终止-<\n");//提示信息

       int x=1,i=0,j,t;

       while(x!=0)//通过while循环输入学生信息,当输入学号为0时退出循环

       {

              printf("请输入学生的学号:");

              scanf("%d",&x);

              if(x==0)break;

              a[i].num=x;

              getchar();

              printf("请输入学生的姓名:");

              gets(a[i].name);

              printf("请输入该名同学的5门课成绩:");

              for(j=0;j<5;j++)

                     scanf("%d",&a[i].classes[j]);

       if((a[i].classes[0]>=50)&&(a[i].classes[1]>=50)&&(a[i].classes[2]>=24)&&(a[i].classes[3]>=8)&&(a[i].classes[4]>=20))a[i].trought=1;

              else a[i].trought=0;//假如符合毕业条件,trought记为1,不符合记为0

              fwrite(&a[i],sizeof(struct students),1,f);//写盘,将a结构体数组中的信息存进文件中,每写一个学生信息存一次

              i++;

       }

       fclose(f);//关闭文件

       return 0;

}

int Find()//给定学号,查找某名同学的信息

{

       FILE *f;//文件指针

       if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件

       {

       printf("文件无法正常打开,程序终止\n");

       exit(0);

       }

       int x,i,find=0,j;

       printf("请输入查找学生的学号:"); //将要查找的学号存入x中

       scanf("%d",&x);

       for(i=0;!feof(f);i++)

       {

              fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息

              if(x==a[i].num)//判断是否当前学号与需要查找的学号是否一致,如果一致,输出该同学的信息

              {

                     printf("学号:%d\n",a[i].num);

                     printf("姓名:%s\n",a[i].name);

                     printf(">-基础课:%d--专业课:%d--选修课:%d--人文类课程:%d--实验性课程:%d-<\n",a[i].classes[0],a[i].classes[1],a[i].classes[2],a[i].classes[3],a[i].classes[4]);

                     find=1;

                     fclose(f);

                     return 0;

              }

              if(a[i].num==0){fclose(f);break;}//查找的学生信息为0时退出查找比对

       }

       if(find==0)printf(">-未查找到该学生信息-<\n"); //提示没有找到该同学的信息

       fclose(f);//关闭文件

       return 0;

}

int Modify()//给定学号,查找某名同学的信息,并做出修改

{

       FILE *f,*p;//文件指针 ,f为读入文件指针,p为存入文件指针

       if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//f文件指针链接文件

       {

       printf("文件无法正常打开,程序终止\n");

       exit(0);

       }

       int x,i,j,find=0;

       printf("请输入查找学生的学号:");  //将要查找的学号存入x中

       scanf("%d",&x);

       for(i=0;!feof(f);i++)

       {

              fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息

              if(x==a[i].num)//判断是否当前学号与需要查找的学号是否一致,如果一致,输出改同学的信息

              {

              printf("请输入修改后的学生信息:\n");//提示信息

              printf("请输入学生的学号:");//接收修改后的学生信息

              scanf("%d",&x);

              if(x==0)break;

              a[i].num=x;

              getchar();

              printf("请输入学生的姓名:");

              gets(a[i].name);

              printf("请输入该名同学的5门课成绩:");

              for(j=0;j<5;j++)

              scanf("%d",&a[i].classes[j]);

       if((a[i].classes[0]>=50)&&(a[i].classes[1]>=50)&&(a[i].classes[2]>=24)&&(a[i].classes[3]>=8)&&(a[i].classes[4]>=20))a[i].trought=1;

              else a[i].trought=0; 

              find=1;//记录是否找到该学生的信息

              }

              if(a[i].num==0){fclose(f);break;}//查找的学生信息为0时退出查找比对

       }

       j=i-1;

       fclose(f);

       if((p=fopen("d:\\数据文件夹\\学分管理系统.txt","w"))==NULL)//p文件指针链接文件

       {

       printf(">-文件无法正常打开,程序终止-<\n");

       exit(0);

       }

       for(i=0;!feof(p);i++)//通过循环将所有同学信息通过a结构体数组存入文件中

       {

              fwrite(&a[i],sizeof(struct students),1,p);

              if(a[i].num==0){fclose(f);break;}//学生信息为0时退出查找比对

       }

       fclose(p);

       if(find==0)printf(">-未查找到该学生信息-<"); //提示没有找到该同学的信息

       return 0;

}

int According()//显示所有学生的学分完成情况

{

       FILE *f;//文件指针

       int i;

       if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件

       {

       printf(">-文件无法正常打开,程序终止-<\n");

       exit(0);

       }

       for(i=0;!feof(f);i++)

       {

              fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息

              if(a[i].num==0){fclose(f);break;}

              printf("学号:%d\t",a[i].num);

              printf("姓名:%s\t",a[i].name);

              printf(">-基础课:%d--专业课:%d--选修课:%d--人文类课程: %d--实验性课程: %d-<\n",a[i].classes[0],a[i].classes[1],a[i].classes[2],a[i].classes[3],a[i].classes[4]);

       }

       fclose(f);//关闭文件

       return 0;

}

int  View()//查看毕业名单

{

       FILE *f;//文件指针

       if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件

       {

       printf("文件无法正常打开,程序终止\n");

       exit(0);

       }

       int i,j=0;

       printf("达到毕业要求的学生名单为:\n");//提示信息

       for(i=0;!feof(f);i++)

       {

              fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息

              if(a[i].trought==1)//判断是否符合毕业要求

              {

                     printf("%s ",a[i].name);

                     j++;

                     if(j==3){

                            printf("\n");

                            j=0;

                     }

              }

       }

       printf("\n");

       fclose(f);//关闭文件

       return 0;

}

int main()

{

       int x=-1;

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

       printf("            |                >菜单<               |\n");

       printf("            |     0.退出程序                       |\n");

       printf("            |     1.输入一个学生的成绩             |\n");

       printf("            |     2.查找一名学生的学分完成状况     |\n");

       printf("            |     3.修改一名学生的学分完成情况     |\n");

       printf("            |     4.显示所有学生的学分完成情况     |\n");

       printf("            |     5.查看达到毕业要求的学生名单     |\n");

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

       while(x!=0)

       {

       printf("请输入您要使用的功能序号:");

       scanf("%d",&x);

       if(x==1)Scanf(); //输入

       if(x==2)Find();//查找

       if(x==3)Modify();//修改 

       if(x==4)According();//显示所有学生完成情况

       if(x==5)View();//查看毕业名单

       if(x==0)printf(">-程序终止,感谢您的使用!!!-<\n");

       }

       return 0;

}

Scanf函数运行结果

Find函数运行结果

Modify函数运行结果

According函数运行结果

View函数运行结果

代码纯属原创,不喜勿喷!!!

#include<stdio.h> #include<string.h> #include<stdlib.h> #define Maxsize 100 typedef struct { int jchk; int zhyk; int xxk; int shyk; int rwk; }Lesson; typedef struct { char name[10]; char sex[4]; char clas[10]; char mayor[20]; char number[20]; Lesson kch; }Linelist; typedef struct { Linelist data[Maxsize]; int length; }Sqlist; FILE *fp; /*保存函数*/ void Save(Sqlist &L,int n) { int i=0; system("cls"); if((fp=fopen("Sqlist.txt","w"))==NULL) { printf("文件打不开!\n"); exit(1); } while(i<n) { fprintf(fp,"\n姓名 性别 班级 专业 学号\n"); fprintf(fp,"%s%15s%15s%15s%15s",L.data[i].name,L.data[i].sex,L.data[i].clas, L.data[i].mayor,L.data[i].number); fprintf(fp,"\n基础课 专业课 选修课 实验课 人文课(学分)\n"); fprintf(fp,"%15d%15d%15d%15d%15d\n",L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk, L.data[i].kch.shyk,L.data[i].kch.rwk); i++; } fclose(fp); printf("\n\n\n\n\n\n\n\t\t\t\t保存成功!!\n\a\a\a"); system("pause"); } /*统计毕业学生*/ void Education(Sqlist L,int n) { int i,found=0; system("cls"); for(i=0;i<n;i++) if(L.data[i].kch.jchk>=50 && L.data[i].kch.zhyk>=50 && L.data[i].kch.xxk>=24 && L.data[i].kch.shyk>=20 && L.data[i].kch.rwk>=8) { printf("\n姓名 性别 班级 专业 学号\n"); printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex, L.data[i].clas,L.data[i].mayor,L.data[i].number); printf("\n"); printf("基础课 专业课 选修课 实验课 人文课(学分)\n"); printf("%d %15d %15d %15d %15d\n", L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk, L.data[i].kch.shyk,L.data[i].kch.rwk); found=1; } if(found==0) printf("\n\n\n\n\n\n\t\t\t所有学生均不达到标准,不能毕业!\n"); system("pause"); } /*统计未毕业学生*/ void Diseducate(Sqlist L,int n) { int i,found=0; system("cls"); for(i=0;i<n;i++) if(L.data[i].kch.jchk<50 || L.data[i].kch.zhyk<50 || L.data[i].kch.xxk<24 || L.data[i].kch.shyk<20 || L.data[i].kch.rwk<8) { printf("\n姓名 性别 班级 专业 学号\n"); printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex, L.data[i].clas,L.data[i].mayor,L.data[i].number); printf("\n"); printf("基础课 专业课 选修课 实验课 人文课(学分)\n"); printf("%d %15d %15d %15d %15d\n", L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk, L.data[i].kch.shyk,L.data[i].kch.rwk); found=1; } if(found==0) printf("\n\n\n\n\n\n\t\t\t所有学生都合格!\n"); system("pause"); } /*班级查找*/ void Scanclass(Sqlist L,int n) { char a[10]; int find=0,i; system("cls"); printf("请输入班级:"); scanf("%s",a); for(i=0;i<n;i++) { if(strcmp(a,L.data[i].clas)==0) { printf("\n姓名 性别 班级 专业 学号\n"); printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex, L.data[i].clas,L.data[i].mayor,L.data[i].number); printf("\n基础课 专业课 选修课 实验课 人文课(学分)\n"); printf("%d %15d %15d %15d %15d\n", L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk, L.data[i].kch.shyk,L.data[i].kch.rwk); find=1; } } if(find==0) printf("没有该班级!"); system("pause"); } /*输入学生信息*/ void Studentinformation(Sqlist &L,int &n) { int i=n; char J; system("cls"); printf("是否输入学生信息(y,n):\n"); scanf("%s",&J); do { if(J=='y') { printf("姓名 性别 班级 专业 学号\n"); scanf("%s %15s %15s %15s %15s",&L.data[i].name,&L.data[i].sex, &L.data[i].clas,&L.data[i].mayor,&L.data[i].number); printf("基础课 专业课 选修课 实验课 人文课(学分)\n"); scanf("%d %15d %15d %15d %15d",&L.data[i].kch.jchk,&L.data[i].kch.zhyk, &L.data[i].kch.xxk,&L.data[i].kch.shyk,&L.data[i].kch.rwk); i++;n++; } printf("是否继续输入?(y,n):"); scanf("%s",&J); }while(J=='y'); printf("是否保存?(y,n):"); scanf("%s",&J); if(J=='y') Save(L,n); } /*初始化*/ void Initlist(Sqlist &L) { L.length=0; } /*按学号查找*/ int Binsearch(Sqlist &L,int n) { int i,j; int low=0,high=n-1,mid; char k[20]; Linelist temp; system("cls"); for(i=1;i<n;i++) { temp=L.data[i]; j=i-1; while(j>=0 && strcmp(temp.number,L.data[j].number)<0) { L.data[j+1]=L.data[j]; j--; } L.data[j+1]=temp; } printf("请输入学生学号:\n"); scanf("%s",k); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(k,L.data[mid].number)==0) { printf("该学生信息如下:\n"); printf("\n\n姓名 性别 班级 专业 学号\n"); printf("%s %15s %15s %15s %15s",L.data[mid].name,L.data[mid].sex, L.data[mid].clas,L.data[mid].mayor,L.data[mid].number); printf("\n基础课 专业课 选修课 实验课 人文课\n"); printf("%d %15d %15d %15d %15d\n",L.data[mid].kch.jchk,L.data[mid].kch.zhyk, L.data[mid].kch.xxk,L.data[mid].kch.shyk,L.data[mid].kch.rwk); return (mid); } else if(strcmp(k,L.data[mid].number)<0) high=mid-1; else low=mid+1; } printf("未找到!\n"); return -1; } /*删除*/ void Delelem(Sqlist &L,int &n) { int i,j;char J; i=Binsearch(L,n); if(i==-1) printf("未找到!\n"); else { for(j=i;j<n;j++) L.data[j]=L.data[j+1]; n--; printf("删除成功!\n"); printf("是否保存?(y,n):"); scanf("%s",&J); if(J=='y') Save(L,n); } } /*输出函数*/ void Display(Sqlist L,int n) { int i; system("cls"); for(i=0;i<n;i++) { printf("\n\n\n姓名 性别 班级 专业 学号\n"); printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex, L.data[i].clas,L.data[i].mayor,L.data[i].number); printf("\n"); printf("基础课 专业课 选修课 实验课 人文课(学分)\n"); printf("%d %15d %15d %15d %15d\n", L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk, L.data[i].kch.shyk,L.data[i].kch.rwk); } system("pause"); } /*打开文件*/ int Open(Sqlist &L ) { int i=0; if((fp=fopen("Sqlist.txt","r"))==NULL) { printf("文件打不开!\n"); exit(1); } while(!feof(fp)) { fscanf(fp,"\n姓名 性别 班级 专业 学号\n"); fscanf(fp,"%s%15s%15s%15s%15s",&L.data[i].name,&L.data[i].sex, &L.data[i].clas,&L.data[i].mayor,&L.data[i].number); fscanf(fp,"\n基础课 专业课 选修课 实验课 人文课(学分)\n"); fscanf(fp,"%d%15d%15d%15d%15d\n",&L.data[i].kch.jchk, &L.data[i].kch.zhyk,&L.data[i].kch.xxk, &L.data[i].kch.shyk,&L.data[i].kch.rwk); i++; } fclose(fp); return (i); } /*希尔排序*/ void Shellsort(Sqlist &L,int n) { int i,j,gap;char k; system("cls"); Linelist temp; gap=n/2; printf("请输入课程类别,基础课(j) 专业课(z) 选修课(x) 实验课(s) 人文课(r)\n"); scanf("%s",&k); if(k=='j') { while(gap>0) { for(i=gap;i<n;i++) { temp=L.data[i]; j=i-gap; while(j>=0 && temp.kch.jchk<L.data[j].kch.jchk) { L.data[j+gap]=L.data[j]; j=j-gap; } L.data[j+gap]=temp; } gap=gap/2; } } if(k=='z') { while(gap>0) { for(i=gap;i<n;i++) { temp=L.data[i]; j=i-gap; while(j>=0 && temp.kch.zhyk<L.data[j].kch.zhyk) { L.data[j+gap]=L.data[j]; j=j-gap; } L.data[j+gap]=temp; } gap=gap/2; } } if(k=='x') { while(gap>0) { for(i=gap;i<n;i++) { temp=L.data[i]; j=i-gap; while(j>=0 && temp.kch.xxk<L.data[j].kch.xxk) { L.data[j+gap]=L.data[j]; j=j-gap; } L.data[j+gap]=temp; } gap=gap/2; } } if(k=='s') { while(gap>0) { for(i=gap;i<n;i++) { temp=L.data[i]; j=i-gap; while(j>=0 && temp.kch.shyk<L.data[j].kch.shyk) { L.data[j+gap]=L.data[j]; j=j-gap; } L.data[j+gap]=temp; } gap=gap/2; } } if(k=='r') { while(gap>0) { for(i=gap;i<n;i++) { temp=L.data[i]; j=i-gap; while(j>=0 && temp.kch.rwk<L.data[j].kch.rwk) { L.data[j+gap]=L.data[j]; j=j-gap; } L.data[j+gap]=temp; } gap=gap/2; } } Display(L,n); } /*修改学分*/ void Change(Sqlist &L,int n) { system("cls"); char ch;int a;int i;char s[10]; i=Binsearch(L,n); if(i==-1) printf("未找到\n"); else { printf("确定修改么?(y or n):"); scanf("%s",&ch); while(ch=='y') { if(ch=='y') { printf("请输入要修改的课程:"); scanf("%s",s); printf("\n"); printf("请输入新学分:"); scanf("%d",&a); printf("\n"); if(strcmp(s,"jchk")==0) L.data[i].kch.jchk=a; if(strcmp(s,"zhyk")==0) L.data[i].kch.zhyk=a; if(strcmp(s,"xxk")==0) L.data[i].kch.xxk=a; if(strcmp(s,"shyk")==0) L.data[i].kch.shyk=a; if(strcmp(s,"rwk")==0) L.data[i].kch.rwk=a; } printf("需要继续修改么?继续(y),不继续(n):"); scanf("%s",&ch); printf("\n"); } printf("是否保存?(y,n):"); scanf("%s",&ch); if(ch=='y') Save(L,n); } } /*主菜单*/ void menu(Sqlist &L,int n,int &m) { int c; system("cls"); while(m==1) { printf("\t\t*=======================================================*\n"); printf("\t\t*\t\t**学分管理系统**\t\t\t*\n"); printf("\t\t*=======================================================*\n"); printf("\t\t*\t\t0.输入学生信息\t\t\t\t*"); printf("\n\t\t*\t\t1.修改学生信息\t\t\t\t*"); printf("\n\t\t*\t\t2.按分数排序\t\t\t\t*"); printf("\n\t\t*\t\t3.按学号查找\t\t\t\t*"); printf("\n\t\t*\t\t4.按班级查找\t\t\t\t*"); printf("\n\t\t*\t\t5.统计可以毕业的学生\t\t\t*"); printf("\n\t\t*\t\t6.统计未毕业的学生\t\t\t*"); printf("\n\t\t*\t\t7.查看所有信息\t\t\t\t*"); printf("\n\t\t*\t\t8.删除信息\t\t\t\t*"); printf("\n\t\t*\t\t9.保存文件\t\t\t\t*"); printf("\n\t\t*\t\t10.打开文件\t\t\t\t*"); printf("\n\t\t*\t\t11.退出系统\t\t\t\t*\n"); printf("\t\t*=======================================================*\n"); printf("\n\t\t Give your choice(0-11):"); scanf("%d",&c); switch(c) { case 0:Studentinformation(L,n);break; case 1:Change(L,n);break; case 2:Shellsort(L,n);break; case 3:Binsearch(L,n);break; case 4:Scanclass(L,n);break; case 5:Education(L,n);break; case 6:Diseducate(L,n);break; case 7:Display(L,n);break; case 8:Delelem(L,n);break; case 9:Save(L,n);break; case 10:Open(L);break; case 11:system("cls");printf("\n\n\n\n\n\t\t\t谢 谢 使 用 本 系 统 !\n"); printf("\n\n\n\n\t\t\t Please input anykey to quit!!\n\a\a");m=5;break; default: printf("\t\t\t Error!\n"); printf("\t\t\t please input again!:"); scanf("%d",&c);break; } } } /*主函数*/ void main() { int i,j=123;char ch;system("color 97"); printf("\t==============================================================\n"); printf("\t\t\t\t系 统 公告!\n"); printf("\t==============================================================\n"); printf("\n\t1、本系统是学分管理程序系统,首先要输入密码才能进入系统!"); printf("\n\n\t2、进入系统后请按提示操作!"); printf("\n\n\t3、注意:系统中要输入的课程均是汉语拼音!"); printf("\n\n\t4、基础课 专业课 选修课 实验课 人文课分别如下: "); printf("\n\n\t5、jchk zhyk xxk shyk rwk"); printf("\n\n\t6、本系统制作者 : 李仁刚 舒世朝 李俊宏"); printf("\n\n\t7、 E_mail : ahhqlrg@163.com\t手机:13516474749"); printf("\n\n\t8、 Made By VC6.0++\t\t\t 2009年12月14日\n"); printf("\n\t============================================================\n"); printf("\t欢迎使用学分管理系统!\n\n"); printf("\t请输入密码(123):"); scanf("%d",&i); int m=1; Sqlist L; Initlist(L); system("color 3e"); do { if(i==j) { system("cls"); printf("是否打开原有文件(y or n)?"); scanf("%s",&ch); if(ch=='y') { L.length=Open(L); menu(L,L.length,m); } else menu(L,L.length,m); } else { printf("密码错误!\n"); printf("please input again!"); scanf("%d",&i); } }while(m==1); }
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值