C语言:学生成绩管理系统(含源代码)

avatar
作者
猴君
阅读量:1

一.功能

二.源代码

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NUM 100 typedef struct {     char no[30];     char name[10];     char sex[10];     char phone[20];     float cyuyan;     float computer;     float datastruct; } *student, student1;  typedef struct {     student stu[MAX_NUM];     int number; } *studentDB;  void read(studentDB temp) {     FILE *infile;     infile = fopen("./数据.txt", "r");     if (!infile)     {         printf("文件打开失败!");         exit(0);     }     while (!feof(infile))     {         temp->stu[temp->number] = malloc(sizeof(student1));         fscanf(infile, "%s %s %s %s %f %f %f", temp->stu[temp->number]->no, temp->stu[temp->number]->name, temp->stu[temp->number]->sex, temp->stu[temp->number]->phone, &(temp->stu[temp->number]->cyuyan), &(temp->stu[temp->number]->computer), &(temp->stu[temp->number]->datastruct));         temp->number++;     }     fclose(infile); }  void write(studentDB temp) {     FILE *outfile;     outfile = fopen("./数据.txt", "w");     if (!outfile)     {         printf("文件打开失败!");         exit(1);     }     if (temp && temp->number > 0)     {         int i;         for (i = 0; i < temp->number; i++)         {             if (i == temp->number - 1)             {                 fprintf(outfile, "%s %s %s %s %.2f %.2f %.2f", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);             }             else             {                 fprintf(outfile, "%s %s %s %s %.2f %.2f %.2f\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);             }         }     }     fclose(outfile);     printf("保存成功");     read(temp); }  void display(studentDB temp) {     int i;     printf("|   学号   |姓名|性别|  手机号  |c语言|英语|高等数学|\n");     for (i = 0; i < temp->number; i++)     {         printf("%s %s %s %s %.2f %.2f %.2f\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);     } }  void menu() {     printf("\n\n\t****************************简单学生信息管理系统*****************************\n");     printf("\t*                              1.显示学生信息                             *|\n");     printf("\t*                              2.增加学生信息                             *|\n");     printf("\t*                              3.删除学生信息                             *|\n");     printf("\t*                              4.修改学生信息                             *|\n");     printf("\t*                              5.查询学生信息                             *|\n");     printf("\t*                              6.排序学生成绩                             *|\n");     printf("\t*                              7.计算学生平均成绩                         *|\n");     printf("\t*                              8.保存学生信息                             *|\n");     printf("\t*                              9.统计全部课程及格人数                     *|\n");     printf("\t*                              10.输出总成绩最高的学生信息                *|\n");     printf("\t*                              0.退出系统                                 *|\n");     printf("\t***************************************************************************\n");     printf("请选择你的操作并将序号输入:"); }  int countDigits(long long n) {     int count = 0;     while (n > 0)     {         n /= 10;         count++;     }     return count; }  void insert(studentDB temp) {     char no[30];     printf("请输入要添加学生的学号:");     scanf("%s", no);     int n;     long long num;     sscanf(no, "%lld", &num);     n = countDigits(num);     if (n != 11)     {         printf("输入的学号位数有误,请重新输入!");         return;     }     else     {         student1 stu;         FILE *outfile;         outfile = fopen("./数据.txt", "a");         if (!outfile)         {             printf("文件打开失败!");             exit(0);         }         strcpy(stu.no, no);         printf("请输入姓名:");         scanf("%s", stu.name);         printf("请输入性别:");         scanf("%s", stu.sex);         printf("请输入手机号:");         scanf("%s", stu.phone);         printf("请输入c语言成绩(带小数点):");         scanf("%f", &stu.cyuyan);         printf("请输入英语成绩(带小数点):");         scanf("%f", &stu.computer);         printf("请输入高等数学成绩(带小数点):");         scanf("%f", &stu.datastruct);         n = fprintf(outfile, "\n%s %s %s %s %f %f %f", stu.no, stu.name, stu.sex, stu.phone, stu.cyuyan, stu.computer, stu.datastruct);         printf("%s %s %s %s %.2f %.2f %.2f", stu.no, stu.name, stu.sex, stu.phone, stu.cyuyan, stu.computer, stu.datastruct);         printf("学生信息已成功插入!信息长度:%d\n", n);         fclose(outfile);         read(temp);         return;     } }  void delete(studentDB temp) {     printf("请输入要删除的学生信息学号:");     char no[15];     int i, k;     scanf("%s", no);     printf("%s", no);     for (i = 0; i < temp->number; i++)     {         if (strcmp(temp->stu[i]->no, no) == 0)         {             for (k = i; k < temp->number; k++)             {                 temp->stu[k] = temp->stu[k + 1];             }             free(temp->stu[temp->number]);             temp->number--;             printf("学生信息已成功删除!\n");             return;         }     }     printf("学生学号输入错误!");     return; }  void modify(studentDB temp) {     printf("请输入要修改的学生信息学号:");     char no[15];     int i, flag = 0;     long num;     scanf("%s", no);     sscanf(no, "%ld", &num);     for (i = 0; i < temp->number; i++)     {         if (strcmp(no, temp->stu[i]->no) == 0)         {             printf("\n学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f\n\n\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);             printf("|1.学号|2.姓名|3.性别|4.手机号|5.c语言成绩|6.英语成绩|7.高等数学成绩|8.不改动并返回菜单|9.依次修改全部数据\n\n\n请输入要改动的数据项:");             scanf("%d", &flag);             switch (flag)             {             case 1:                 printf("请输入要修改的学号:");                 scanf("%s", temp->stu[i]->no);                 break;             case 2:                 printf("请输入姓名:");                 scanf("%s", temp->stu[i]->name);                 break;             case 3:                 printf("请输入性别:");                 scanf("%s", temp->stu[i]->sex);                 break;             case 4:                 printf("请输入手机号:");                 scanf("%s", temp->stu[i]->phone);                 break;             case 5:                 printf("请输入c语言成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->cyuyan));                 break;             case 6:                 printf("请输入英语成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->computer));                 break;             case 7:                 printf("请输入高等数学成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->datastruct));                 break;             case 8:                 return;             case 9:                 printf("请输入姓名:");                 scanf("%s", temp->stu[i]->name);                 printf("请输入性别:");                 scanf("%s", temp->stu[i]->sex);                 printf("请输入手机号:");                 scanf("%s", temp->stu[i]->phone);                 printf("请输入c语言成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->cyuyan));                 printf("请输入英语成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->computer));                 printf("请输入高等数学成绩(带小数点):");                 scanf("%f", &(temp->stu[i]->datastruct));                 break;             default:                 printf("请重新选择!");                 break;             }             return;         }     } }  void search(studentDB temp) {     printf("请输入要查询的学生信息学号:");     char no[30];     int i, n;     long long num;     scanf("%s", no);     sscanf(no, "%lld", &num);     n = countDigits(num);     if (n != 11)     {         printf("输入的学号位数有误,请重新输入!");         return;     }     else     {         for (i = 0; i < temp->number; i++)         {             if (strcmp(temp->stu[i]->no, no) == 0)             {                 printf("\n学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f\n\n\n", temp->stu[i]->no, temp->stu[i]->name, temp->stu[i]->sex, temp->stu[i]->phone, temp->stu[i]->cyuyan, temp->stu[i]->computer, temp->stu[i]->datastruct);                 return;             }         }         printf("学生学号输入错误!");         return;     } }  void sort(studentDB temp) {     int i, j, n;     float t;     for (i = 0; i < temp->number; i++)     {         for (j = i + 1; j < temp->number; j++)         {             if ((temp->stu[i]->cyuyan + temp->stu[i]->computer + temp->stu[i]->datastruct) < (temp->stu[j]->cyuyan + temp->stu[j]->computer + temp->stu[j]->datastruct))             {                 student1 *tempstu = temp->stu[i];                 temp->stu[i] = temp->stu[j];                 temp->stu[j] = tempstu;             }         }     }     printf("已按成绩排序完成!\n"); }  void average(studentDB temp) {     int i;     float ctotal = 0, comtotal = 0, dstotal = 0;     for (i = 0; i < temp->number; i++)     {         ctotal += temp->stu[i]->cyuyan;         comtotal += temp->stu[i]->computer;         dstotal += temp->stu[i]->datastruct;     }     printf("C语言平均成绩:%.2f 英语平均成绩:%.2f 高等数学平均成绩:%.2f\n", ctotal / temp->number, comtotal / temp->number, dstotal / temp->number); }  void passing(studentDB temp) {     int i, cpass = 0, compass = 0, dpass = 0;     for (i = 0; i < temp->number; i++)     {         if (temp->stu[i]->cyuyan >= 60)         {             cpass++;         }         if (temp->stu[i]->computer >= 60)         {             compass++;         }         if (temp->stu[i]->datastruct >= 60)         {             dpass++;         }     }     printf("C语言及格人数:%d 英语及格人数:%d 高等数学及格人数:%d\n", cpass, compass, dpass); }  void max(studentDB temp) {     int i, index = 0;     float maxScore = 0;     for (i = 0; i < temp->number; i++)     {         float totalScore = temp->stu[i]->cyuyan + temp->stu[i]->computer + temp->stu[i]->datastruct;         if (totalScore > maxScore)         {             maxScore = totalScore;             index = i;         }     }     printf("学号:%s  姓名:%s  性别:%s  手机号:%s  c语言:%.2f  英语:%.2f  高等数学:%.2f 总成绩:%.2f\n", temp->stu[index]->no, temp->stu[index]->name, temp->stu[index]->sex, temp->stu[index]->phone, temp->stu[index]->cyuyan, temp->stu[index]->computer, temp->stu[index]->datastruct, maxScore); }  int main() {     int select;     studentDB stu = malloc(sizeof(studentDB));     stu->number = 0;     read(stu);     do     {         menu();         scanf("%d", &select);         switch (select)         {         case 1:             display(stu);             break;         case 2:             insert(stu);             break;         case 3:             delete (stu);             break;         case 4:             modify(stu);             break;         case 5:             search(stu);             break;         case 6:             sort(stu);             break;         case 7:             average(stu);             break;         case 8:             write(stu);             break;         case 9:             passing(stu);             break;         case 10:             max(stu);             break;         case 0:             exit(1);         }     } while (1);     return 0; }

三.注意事项

(1)事先准备: 数据.txt 文件(可以含有学生信息,可以空白,但是必须有)

(2)学号为11

(3)该代码不含有C99或者C11

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!