学牲管理系统
刚学完c语言,写一个学生管理系统来练练手。
1. 录人每个学生的学号、姓名和各科考试成绩;
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
int enter(int n)
{
label:
for (int i = stunumber; i < stunumber+n;i++)
{
printf("请输入姓名:");
getchar();
gets(stu[i].name );
printf("请输入学号:");
gets(stu[i].Sno);
printf("请输入各科成绩:(按照语数英理化生的顺序)");
for (int j = 0; j < 6; j++)
{
scanf("%d", &stu[i].grade[j]);
}
printf("叮咚,学牲++\n\n");
}
printf("录入完毕\n");
stunumber += n;
printf("如果要继续录入请按1,录入完毕请按0\n");
int flag;
scanf("%d", &flag);
if (flag) {
printf("真来是吧(恼),这次多少个:");
int t;
scanf("%d", &t);
n = t;
goto label;
}
return stunumber;
system("pause");
}
2. 计算每门课程,每个学生的总分和平均分,按学号,姓名查询学生排名及其考试成绩;
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void search()
{
int number;
int isprime = 0;
printf("*****************************************************\n");
printf("**-----------------按名字查询请按1-----------------**\n");
printf("*****************************************************\n");
printf("**-----------------按学号查询请按2-----------------**\n");
printf("*****************************************************\n");
printf("**-----------------手贱请按3滚出去-----------------**\n");
printf("*****************************************************\n");
scanf("%d", &number);
switch (number) {
case 1:
printf("请输入怨种姓名:");
char s[20];
scanf("%s", s);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].name, s) == 0) {
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
isprime = 1;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5],stu[i].sumgrade,stu[i].averagegrade);
}
}
break;
case 2:
printf("请输入怨种学号:");
char s1[15];
scanf("%s", s1);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].Sno, s1) == 0) {
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
isprime = 1;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
}
break;
case 3:return;
default:printf("请在1--3之间输入!\n");
}
if (isprime == 0){
printf("找不到介个大怨种捏!\n");
}
system("pause");
}
3. 按每个学生的总分由高到低排出名次表, 按每个学生的总分由低到高排出名次表, 按学号由小到大排出成绩表,按姓名的字典顺序排出成绩表;
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void gradelist()
{
printf("*****************************************************\n");
printf("**---------------按姓名字典顺序请按1---------------**\n");
printf("*****************************************************\n");
printf("**---------------按学号从小到大顺序请按2-----------**\n");
printf("*****************************************************\n");
printf("**---------------按总分由高到低顺序请按3-----------**\n");
printf("*****************************************************\n");
printf("**---------------按总分由低到高顺序请按4-----------**\n");
printf("*****************************************************\n");
printf("**---------------手贱请按5滚出去-------------------**\n");
printf("*****************************************************\n");
int number;
scanf("%d", &number);
switch (number) {
case 1:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber -1- i; j++)
{
if (stu[j].name < stu[j + 1].name) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 2:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].Sno < stu[j + 1].Sno) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 3:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].sumgrade < stu[j + 1].sumgrade) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber -1- i; j++)
{
if (stu[j].name < stu[j + 1].name) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 4:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].sumgrade > stu[j + 1].sumgrade) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 5:return;
default:printf("请从1-5之间输入捏!\n"); break;
}
}
4. 按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void studyreport()
{
printf(" 语文\t 数学\t 英语\t 物理\t 化学\t 生物\t\n");
printf("—————————————————————————————————————————————————\n");
int excellent[6] = { 0 }, good[6] = { 0 }, medium[6] = { 0 }, pass[6] = { 0 }, fail[6] = { 0 };
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < stunumber; j++)
{
if (stu[j].grade[i] >= 90 && stu[j].grade[i] <= 100) {
excellent[i]++;
}
else if (stu[j].grade[i] >= 80 && stu[j].grade[i] < 90) {
good[i]++;
}
else if (stu[j].grade[i] >= 70 && stu[j].grade[i] < 80) {
medium[i]++;
}
else if (stu[j].grade[i] >= 60 && stu[j].grade[i] < 70) {
pass[i]++;
}
else {
fail[i]++;
}
}
}
printf("优秀: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t",excellent[i],excellent[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("良好: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", good[i],good[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("中等: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", medium[i],medium[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("及格: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", pass[i],pass[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("不及格:");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", fail[i],fail[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
}
5. 将每个学生的记录信息写入文件;
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void save()
{
FILE* fp;
char filename[100];
int i;
printf("请输入要保存的文件名:\n");
scanf("%s", filename);
if ((fp = fopen(filename, "w")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < stunumber; i++)
{
if (fwrite(&stu[i], sizeof(struct Stu), 1, fp) != 1)
printf("保存失败!\n");
}
printf("保存成功!\n");
fclose(fp);
system("pause");
}
6.从文件中读出每个学生的记录信息并显示。
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void readfile()
{
FILE* fp = fopen("student.txt", "rb");
struct Stu pa[100];
for (int i = 0; i < stunumber; i++)
{
fscanf(fp, "%s %s %d %d %d %d %d %d %d %lf", pa[i].Sno, pa[i].name, &pa[i].grade[0], &pa[i].grade[1], &pa[i].grade[2], &pa[i].grade[3], &pa[i].grade[4], &pa[i].grade[5], &pa[i].sumgrade, &pa[i].averagegrade);
}
for (int i = 0; i < stunumber; i++)
{
pa[i].sumgrade = 0;
pa[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
pa[i].sumgrade += pa[i].grade[j];
}
pa[i].averagegrade = pa[i].sumgrade*1.0 / 6;
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", pa[i].Sno, pa[i].name, pa[i].grade[0], pa[i].grade[1], pa[i].grade[2], pa[i].grade[3], pa[i].grade[4], pa[i].grade[5], pa[i].sumgrade, pa[i].averagegrade);
}
fclose(fp);
}
7.显示当前所有学生信息
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void display()
{
if (stunumber == 0) {
printf("现在暂无学牲信息,请先添加学牲信息!\n");
}
else {
printf("现在共有%d名学生\n", stunumber);
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
}
system("pause");
}
8.修改学生信息
#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void change(int stunumber)
{
int isprime = 0,number;
printf("请输入需要修改的怨种姓名捏:");
char s[15];
scanf("%s", s);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].name, s) == 0)
{
isprime = 1;
printf("***************************************************\n");
printf("*----1.修改学号-------- - -----2.修改姓名-------*\n");
printf("*----3.修改生物成绩---- - -----4.修改语文成绩---*\n");
printf("*----5.修改数学成绩---- - -----6.修改英语成绩---*\n");
printf("*----7.修改物理成绩---- - -----8.修改化学成绩---*\n");
printf("*----9.退出修改-------- - ----------------------*\n");
printf("***************************************************\n\n");
printf("请输入你要修改的事项序号:");
scanf("%d", &number);
printf("请输入修改的内容:\n");
switch (number) {
case 1:scanf("%s", stu[i].Sno); break;
case 2:scanf("%s", stu[i].name); break;
case 3:scanf("%d", &stu[i].grade[5]); break;
case 4:scanf("%d", &stu[i].grade[0]); break;
case 5:scanf("%d", &stu[i].grade[1]); break;
case 6:scanf("%d", &stu[i].grade[2]); break;
case 7:scanf("%d", &stu[i].grade[3]); break;
case 8:scanf("%d", &stu[i].grade[4]); break;
case 9:return;
default:printf("请输入1-9之间的数字(恼)!\n");
}
if (number >= 1 && number <= 9) {
printf("叮咚,修改成功!\n");
}
break;
}
}
if (!isprime) {
printf("叮咚,未找到该学牲!\n");
}
system("pause");
}
完整代码如下:
#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stu {
char Sno[15];
char name[20];
int grade[6];
int sumgrade;
double averagegrade;
}stu[100];
extern int stunumber;
void menu();//整个菜单
int enter(int n);//录入学牲信息
void search();//找出你心中的学牲
void change(int stunumber);//修改信息
void help();//使用说明
void gradelist();//输出现有成绩表
void save();//将学生信息写入文件
void display();//从文件中读出信息并显示
void studyreport();//输出学情统计表
void readfile();//读取文件并显示其内容
int stunumber = 0;
void menu()
{
printf("\n");
printf("*****************************************************\n");
printf("* 学生信息管理系统 *\n");
printf("*****************************************************\n");
printf("*********************系统功能菜单********************\n");
printf("------------------------ -----------------------\n");
printf("*****************************************************\n");
printf("** 1、使用帮助 * 2、录入学生信息 **\n");
printf("*****************************************************\n");
printf("** 3、查询学生信息 * 4、输出当前成绩表 **\n");
printf("*****************************************************\n");
printf("** 5、保存当前信息 * 6、显示当前所有信息 **\n");
printf("*****************************************************\n");
printf("** 7、修改学生信息 * 8、输出学情统计表 **\n");
printf("*****************************************************\n");
printf("** 9、读取文件记录信息 * 10、退出系统 **\n");
printf("*****************************************************\n");
printf("------------------------ -----------------------\n");
}
void help() //使用帮助
{
printf("\n这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项:\n");
printf("\n 注意事项: \n ");
printf("\n 1、请根据提示进行操作!\n");
printf("\n 2、初次使用请先选择增加学生信息!\n");
printf("\n 3、修改或者增加学生信息后切记保存!\n");
printf("\n 4、如果数据有错误,请先修改再保存!\n");
printf("\n 5、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
printf("\n “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
printf("\n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");
printf("\n 6、学生信息包括:姓名、学号、语文成绩、数学成绩、英语成绩等!\n");
printf("\n 7、各科成绩统计表为每个学生的信息以及每门课程的总分和平均分!\n");
printf("\n 8、学情统计表为按类别统计每门课程以及所占百分比!\n");
printf("\n 7、使用遇到任何问题请与我们联系,电话:12345678\n");
printf("\n 8、最后感谢您的使用!\n");
system("pause");
}
int enter(int n)
{
label:
for (int i = stunumber; i < stunumber+n;i++)
{
printf("请输入姓名:");
getchar();
gets(stu[i].name );
printf("请输入学号:");
gets(stu[i].Sno);
printf("请输入各科成绩:(按照语数英理化生的顺序)");
for (int j = 0; j < 6; j++)
{
scanf("%d", &stu[i].grade[j]);
}
printf("叮咚,学牲++\n\n");
}
printf("录入完毕\n");
stunumber += n;
printf("如果要继续录入请按1,录入完毕请按0\n");
int flag;
scanf("%d", &flag);
if (flag) {
printf("真来是吧(恼),这次多少个:");
int t;
scanf("%d", &t);
n = t;
goto label;
}
return stunumber;
system("pause");
}
void search()
{
int number;
int isprime = 0;
printf("*****************************************************\n");
printf("**-----------------按名字查询请按1-----------------**\n");
printf("*****************************************************\n");
printf("**-----------------按学号查询请按2-----------------**\n");
printf("*****************************************************\n");
printf("**-----------------手贱请按3滚出去-----------------**\n");
printf("*****************************************************\n");
scanf("%d", &number);
switch (number) {
case 1:
printf("请输入怨种姓名:");
char s[20];
scanf("%s", s);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].name, s) == 0) {
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
isprime = 1;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5],stu[i].sumgrade,stu[i].averagegrade);
}
}
break;
case 2:
printf("请输入怨种学号:");
char s1[15];
scanf("%s", s1);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].Sno, s1) == 0) {
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
isprime = 1;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
}
break;
case 3:return;
default:printf("请在1--3之间输入!\n");
}
if (isprime == 0){
printf("找不到介个大怨种捏!\n");
}
system("pause");
}
void gradelist()
{
printf("*****************************************************\n");
printf("**---------------按姓名字典顺序请按1---------------**\n");
printf("*****************************************************\n");
printf("**---------------按学号从小到大顺序请按2-----------**\n");
printf("*****************************************************\n");
printf("**---------------按总分由高到低顺序请按3-----------**\n");
printf("*****************************************************\n");
printf("**---------------按总分由低到高顺序请按4-----------**\n");
printf("*****************************************************\n");
printf("**---------------手贱请按5滚出去-------------------**\n");
printf("*****************************************************\n");
int number;
scanf("%d", &number);
switch (number) {
case 1:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber -1- i; j++)
{
if (stu[j].name < stu[j + 1].name) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 2:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].Sno < stu[j + 1].Sno) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 3:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].sumgrade < stu[j + 1].sumgrade) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber -1- i; j++)
{
if (stu[j].name < stu[j + 1].name) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 4:
for (int i = 0; i < stunumber; i++)
{
for (int j = 0; j < stunumber - 1 - i; j++)
{
if (stu[j].sumgrade > stu[j + 1].sumgrade) {
struct Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
break;
case 5:return;
default:printf("请从1-5之间输入捏!\n"); break;
}
}
void save()
{
FILE* fp;
char filename[100];
int i;
printf("请输入要保存的文件名:\n");
scanf("%s", filename);
if ((fp = fopen(filename, "w")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < stunumber; i++)
{
if (fwrite(&stu[i], sizeof(struct Stu), 1, fp) != 1)
printf("保存失败!\n");
}
printf("保存成功!\n");
fclose(fp);
system("pause");
}
void display()
{
if (stunumber == 0) {
printf("现在暂无学牲信息,请先添加学牲信息!\n");
}
else {
printf("现在共有%d名学生\n", stunumber);
printf("学号 姓名 语文 数学 英语 物理 化学 生物 总分 平均分\n");
for (int i = 0; i < stunumber; i++)
{
stu[i].sumgrade = 0;
stu[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
stu[i].sumgrade += stu[i].grade[j];
}
stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
}
}
system("pause");
}
void change(int stunumber)
{
int isprime = 0,number;
printf("请输入需要修改的怨种姓名捏:");
char s[15];
scanf("%s", s);
for (int i = 0; i < stunumber; i++)
{
if (strcmp(stu[i].name, s) == 0)
{
isprime = 1;
printf("***************************************************\n");
printf("*----1.修改学号-------- - -----2.修改姓名-------*\n");
printf("*----3.修改生物成绩---- - -----4.修改语文成绩---*\n");
printf("*----5.修改数学成绩---- - -----6.修改英语成绩---*\n");
printf("*----7.修改物理成绩---- - -----8.修改化学成绩---*\n");
printf("*----9.退出修改-------- - ----------------------*\n");
printf("***************************************************\n\n");
printf("请输入你要修改的事项序号:");
scanf("%d", &number);
printf("请输入修改的内容:\n");
switch (number) {
case 1:scanf("%s", stu[i].Sno); break;
case 2:scanf("%s", stu[i].name); break;
case 3:scanf("%d", &stu[i].grade[5]); break;
case 4:scanf("%d", &stu[i].grade[0]); break;
case 5:scanf("%d", &stu[i].grade[1]); break;
case 6:scanf("%d", &stu[i].grade[2]); break;
case 7:scanf("%d", &stu[i].grade[3]); break;
case 8:scanf("%d", &stu[i].grade[4]); break;
case 9:return;
default:printf("请输入1-9之间的数字(恼)!\n");
}
if (number >= 1 && number <= 9) {
printf("叮咚,修改成功!\n");
}
break;
}
}
if (!isprime) {
printf("叮咚,未找到该学牲!\n");
}
system("pause");
}
void readfile()
{
FILE* fp = fopen("student.txt", "rb");
struct Stu pa[100];
for (int i = 0; i < stunumber; i++)
{
fscanf(fp, "%s %s %d %d %d %d %d %d %d %lf", pa[i].Sno, pa[i].name, &pa[i].grade[0], &pa[i].grade[1], &pa[i].grade[2], &pa[i].grade[3], &pa[i].grade[4], &pa[i].grade[5], &pa[i].sumgrade, &pa[i].averagegrade);
}
for (int i = 0; i < stunumber; i++)
{
pa[i].sumgrade = 0;
pa[i].averagegrade = 0;
for (int j = 0; j < 6; j++)
{
pa[i].sumgrade += pa[i].grade[j];
}
pa[i].averagegrade = pa[i].sumgrade*1.0 / 6;
printf("%s %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", pa[i].Sno, pa[i].name, pa[i].grade[0], pa[i].grade[1], pa[i].grade[2], pa[i].grade[3], pa[i].grade[4], pa[i].grade[5], pa[i].sumgrade, pa[i].averagegrade);
}
fclose(fp);
}
void studyreport()
{
printf(" 语文\t 数学\t 英语\t 物理\t 化学\t 生物\t\n");
printf("—————————————————————————————————————————————————\n");
int excellent[6] = { 0 }, good[6] = { 0 }, medium[6] = { 0 }, pass[6] = { 0 }, fail[6] = { 0 };
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < stunumber; j++)
{
if (stu[j].grade[i] >= 90 && stu[j].grade[i] <= 100) {
excellent[i]++;
}
else if (stu[j].grade[i] >= 80 && stu[j].grade[i] < 90) {
good[i]++;
}
else if (stu[j].grade[i] >= 70 && stu[j].grade[i] < 80) {
medium[i]++;
}
else if (stu[j].grade[i] >= 60 && stu[j].grade[i] < 70) {
pass[i]++;
}
else {
fail[i]++;
}
}
}
printf("优秀: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t",excellent[i],excellent[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("良好: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", good[i],good[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("中等: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", medium[i],medium[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("及格: ");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", pass[i],pass[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
printf("不及格:");
for (int i = 0; i < 6; i++)
{
printf("%d(%.2lf%%)\t", fail[i],fail[i]*100*1.0/stunumber);
if (i == 5) {
printf("\n");
}
}
}
int main()
{
int number;
int n;
int t=1;
while (t)
{
menu();
printf("请输入菜单编号:");
scanf("%d", &number);
switch (number)
{
case 1:help(); break; //使用说明书
case 2:
printf("请输入录入的学牲数:");
scanf("%d", &n);
stunumber=enter(n);
break; //录入学生信息
case 3:search(); break; //查询学生信息
case 4:gradelist(); break;
case 5:save(); break; //保存当前信息
case 6:display(); break; //显示当前信息
case 7:change(stunumber); break; //修改学生信息
case 8:studyreport(); break;//输出学情统计表
case 10:t = 0; break; //退出
case 9:readfile(); break;//读取文件并显示信息
default:printf("输入有误!");
}
}
}
第一次写项目,感觉有很多bug,还是需要改改。