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

0mit 2024-07-01 10:35:03 阅读 51

一.功能

二.源代码

#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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。