学生成绩管理系统C语言代码,学生成绩管理系统c语言代码 和运行

http://www.itjxue.com  2023-01-22 11:58  来源:未知  点击次数: 

用C语言设计一个学生成绩管理系统

#include stdio.h

#include string.h

#include stdlib.h

#define?MAX?1000

/*定义学生成绩信息结构*/

struct stu

{

char id[8];

char name[8];

扩展资料:

short:修饰int,短整型数据,可省略被修饰的int。(KR时期引入)

long:修饰int,长整型数据,可省略被修饰的int。(KR时期引入)

long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)

signed:修饰整型数据,有符号数据类型。(C89标准新增)

unsigned:修饰整型数据,无符号数据类型。(KR时期引入)

restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)

复杂类型关键字

struct:结构体声明。(KR时期引入)

union:联合体声明。(KR时期引入)

enum:枚举声明。(C89标准新增)

typedef:声明类型别名。(KR时期引入)

sizeof:得到特定类型或特定类型变量的大小。(KR时期引入)

inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)

参考资料来源:百度百科-c语言

C语言实现 学生成绩管理系统(超详细) 内附源码

#includestdio.h

#includestring.h

#includestdlib.h

#includeconio.h

#define N 50//定义的学生数组的个数

#define M 1//定义的管理员数组的个数

int k;//录入学生的个数

char read_door[20];//读取文件的"门"

void Add_data(int flag);//增加数据

void Count_score(int flag);//求平均成绩和总成绩

void Delete_data(int flag);//根据学号删除对应学生的成绩

int Landing(int key);//登录程序

void Load_data();//载入数据

void Updata_stu(int flag);

void Read_bigdoor(char *b);

void Rank_score(int way, int flag);//按照需求对对应的成绩排序

void Read_data(char read_door);//读取数据

void Read_door();//读取"门"值

void Read_main_flag(int *a);

void Read_k();

void Save_bigdoor(char *b);

void Save_data(int flag);//保存数据

void Save_door();//保存"门"值

void Save_main_flag(int *a);

void Save_k(int k);

void Screen_rank();

void Screen_search();

void Screen_stu();

void Screen_teacher();

void Screen_stu_teach();

void Screen_onlyteach();

void Search_data(int way, int flag);//按学号或姓名查找查找

static struct STUDENT//学生的信息

{

char num[10];

char name[10];

float score[3];

float sum;

float aver;

int rank[4];

}stu[N];

static struct TEACHER//教师的登录账号和密码

{

char num[10];

char code[10];

}teach[M] = { "18061124","991228" };

int main()

{

char bigdoor ='n';//教师可通过bigdoor控制学生的权限

char *c=bigdoor;

int order1, order2, order3;//order为用户登录的指令

int door1, door2, door3;

printf ("请输入管理员登录指令:\n");

gets(read_door);

if (strcmp(read_door,"Lu Chen")==0)

{

printf("欢迎使用,您目前是拥有最高权限的管理员,请输入您的账号和密码:\n\n");

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

Screen_onlyteach();

door1 = Landing(1);

if (door1 == 2)

{

printf("\n账号或密码不正确");

return 0;

}

}

else

{

Screen_stu_teach();

printf("请输入序号即选择登录选项:");

scanf("%d", order1);

printf("\n\n");

door1 = Landing(order1);//door1确定用户的权限

switch (door1)//提示用户输入出错

{

case 1:

case 3: break;

case 2:printf("\n输入的账号或密码有误"); return 0;

case 4:printf("\n输入的号码有误"); return 0;

}

}

if (door1 == 1)//老师界面

{

int flag = 0;

int *p=flag;

char teach_read_key;

printf("\n是否读取数据?(y/n):");

scanf("%*c%c",teach_read_key);

if(teach_read_key=='y')

{

Read_k();

? ? Read_door();

Read_main_flag(p);

Read_data(read_door[20]);

}

printf("\n\n");

for (int count = 1; count 0; count++)//利用死循环来重复使用功能

{

Screen_teacher();

printf("\n请输入序号即选择登录选项:");

scanf("%d", order2);

printf("\n\n");

if (order2 == 10)

break;

switch (order2)

{

case 1:

{

Load_data();

flag=1;

Save_main_flag(p);

Save_k(k);

}break;

case 2:Updata_stu(flag); break;

case 3:

{

Screen_search();

printf("请输入你想查询成绩的方式:");

scanf("%d", door2);

Search_data(door2, flag);

}break;

case 4:Add_data(flag);break;

case 5:Delete_data(flag);break;

case 6:

{

Screen_rank();

printf("请输入成绩序号来选择排序:");

scanf("%d", door2);

Rank_score(door2, flag);

} break;

case 7:

{

Save_data(flag);

Save_door();

Save_k(k);

} break;

case 8:

{

bigdoor ='n';

Save_bigdoor(c);

}break;

case 9:

{

bigdoor ='y';

Save_bigdoor(c);

? }break;

default:printf("您输入的序号有误!\n\n");

}

}

}

else//学生界面

{

Read_k();

Read_data('y');

for (int k = 1; k 0; k++)

{

Screen_stu();

printf("请输入下一步操作的序号:");

scanf("%d", order3);

if (order3 == 3)

break;

switch (order3)

{

case 1:

{

Screen_search();

printf("请输入你想查询成绩的方式");

scanf("%d", door3);

Search_data(door3, 1);

}break;

case 2:

{

Screen_rank();

printf("请输入成绩序号来选择排序:");

scanf("%d", door3);

Rank_score(door3, 1);

}break;

default:printf("输入的操作序号有误\n\n");

}

}

}

return 0;

}

int Landing(int key)//登录程序

{

char num[10];

char code[10];

if (key == 1)

{

printf("请输入账号:");

scanf("%s", num);

printf("\n请输入密码:");

scanf("%s", code);

for (int i = 0; i M; i++)

if (strcmp(teach[i].num, num) == 0 strcmp(teach[i].code, code) == 0)//判断登陆账号和密码是否正确

return 1;

else

return 2;

}

else if (key == 2)

{

return 3;

}

else

{

return 4;

}

}

void Search_data(int way, int flag)//按学号或姓名查找查找

{

int Search_flag = 1;

if (flag)

{

char num[10], name[10];

int i;

if (way == 1)

{

printf("\n请输入学号:");

scanf("%s", num);

for (i = 0; i k; i++)

{

if (strcmp(stu[i].num, num) == 0)//判断学号存不存在

{

printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);

Search_flag = 0;

break;

}

}

if (Search_flag)

printf("\n您输入的学号有误\n");

}

else if (way == 2)

{

printf("\n请输入姓名:");

scanf("%s", name);

for (i = 0; i N; i++)

{

if (strcmp(stu[i].name, name) == 0)//判断姓名存不存在

{

printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);

flag = 0;

break;

}

}

if (flag)

printf("\n输入的姓名有误\n");

}

else

printf("\n输入的序号有误\n");

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Count_score(int flag)//求平均成绩和总成绩

{

if (flag)

{

for (int i = 0; i k; i++)

{

stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];

stu[i].aver = stu[i].sum / 3;

}

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Load_data()//载入数据

{

printf("输入录入学生成绩个数:");

scanf("%d", k);

for (int i = 0; i k; i++)

{

scanf("%s%s%f%f%f", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]);

Count_score(1);

}

}

void Rank_score(int way, int flag)//按照需求对对应的成绩排序

{

int i, j, n, temp;

if (flag)

{

for (i = 0; i 4; i++)

for (j = 0; j k; j++)

stu[j].rank[i] = j + 1;

if (way == 1)

{

for (i = 0; i 3; i++)

for (j = 0; j k; j++)

for (n = j + 1; n k; n++)

if (stu[j].score[i] stu[n].score[i])

{

temp = stu[j].rank[i];

stu[j].rank[i] = stu[n].rank[i];

stu[n].rank[i] = temp;

}

printf("\n");

for (i = 0; i k; i++)

printf("姓名:%s 学号:%s subject1:%d subject2:%d subject3:%d\n", stu[i].name, stu[i].num, stu[i].rank[0], stu[i].rank[1], stu[i].rank[2]);

}

else if (way == 2)

{

for (j = 0; j k; j++)

for (n = j + 1; n k; n++)

if (stu[j].sum stu[n].sum)

{

temp = stu[j].rank[3];

stu[j].rank[3] = stu[n].rank[3];

stu[n].rank[3] = temp;

}

printf("\n");

for (i = 0; i k; i++)

printf("姓名:%s 学号:%s sum: %d\n", stu[i].name, stu[i].num, stu[i].rank[3]);

}

else

{

printf("\n输入的序号有误\n");

}

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Delete_data(int flag)//根据学号删除对应学生的成绩

{

if (flag)

{

int i, j;

char num[10];

printf("\n请输入您想要删除信息的学号:");

scanf("%s", num);

for (i = 0; i k; i++)

{

if (strcmp(stu[i].num, num) == 0)

for (j = i + 1; j k; j++)

{

stu[i] = stu[j];

Count_score(1);

}

}

k--;

Save_k(k);

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Updata_stu(int flag)//根据学号修改学生的成绩

{

int Updata_flag = 1;

if (flag)

{

char num[10];

float subject1, subject2, subject3;

printf("\n请输入您想要修改学生的学号:");

scanf("%s", num);

printf("\n请输入您想要更改的学生三科的成绩:");

scanf("%f%f%f", subject1, subject2, subject3);

for (int i = 0; i k; i++)

if (strcmp(stu[i].num, num) == 0)

{

stu[i].score[0] = subject1;

stu[i].score[1] = subject2;

stu[i].score[2] = subject3;

Updata_flag = 0;

Count_score(1);

}

if (Updata_flag)

{

printf("\n输入学号有误\n");

}

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Save_data(int flag)//保存数据

{

if(flag)

{

FILE *fp;

if((fp=fopen("load.txt","w"))==NULL)

{

printf("Save_data error!");

exit(0);

}

for(int i=0;ik;i++)

{

fwrite(stu[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

printf("成功保存数据!\n\n");

read_door[20]='y';

}

else

{

printf("\n您还没有载入数据\n");

}

}

void Read_data(char read_door)//读取数据

{

if(read_door=='y')

{

FILE *fp;

if((fp=fopen("load.txt","r"))==NULL)

{

printf("Read_data error!");

exit(0);

}

for(int i=0;ik;i++)

{

fread(stu[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

else

{

printf("\n没有保存数据的记录\n");

}

}

void Save_door()//保存"门"值

{

FILE *fp;

if((fp=fopen("door.txt","w"))==NULL)

{

printf("Save_door error!");

exit(0);

}

fputc(read_door[20],fp);

fclose(fp);

}

void Read_door()//读取"门"值

{

FILE *fp;

if((fp=fopen("door.txt","r"))==NULL)

{

printf("Read_door error!");

exit(0);

}

read_door[20]=fgetc(fp);

fclose(fp);

}

void Save_main_flag(int *a)

{

FILE *fp;

if((fp=fopen("flag.txt","w"))==NULL)

{

printf("Save_main_flag error!");

exit(0);

}

fprintf(fp,"%d",*a);

fclose(fp);

}

void Read_main_flag(int *a)

{

FILE *fp;

if((fp=fopen("flag.txt","r"))==NULL)

{

printf("Read_main_flag error!");

exit(0);

}

fscanf(fp,"%d",a);

fclose(fp);

}

void Save_bigdoor(char *b)

{

FILE *fp;

if((fp=fopen("bigdoor.txt","w"))==0)

{

printf("Save_bigdoor error!");

exit(0);

}

fputc(*b,fp);

fclose(fp);

}

void Read_bigdoor(char *b)

{

FILE *fp;

if((fp=fopen("bigdoor.txt","r"))==0)

{

printf("Read_bigdoor error!");

exit(0);

}

*b=fgetc(fp);

fclose(fp);

}

void Save_k(int k)

{

FILE *fp;

if((fp=fopen("k.txt","w"))==0)

{

printf("Save_k error!");

exit(0);

}

fprintf(fp,"%d",k);

fclose(fp);

}

void Read_k()

{

FILE *fp;

if((fp=fopen("k.txt","r"))==0)

{

printf("Read_k error!");

exit(0);

}

fscanf(fp,"%d",k);

fclose(fp);

}

void Add_data(int flag)//增加数据

{

int i, j,count=k;

char num[10], name[10];

float subject1, subject2, subject3;

if (flag)

{

printf("\n输入您想增加的数据条数:");

scanf("%d", i);

for (j = 0; j i; j++)

{

printf("\n输入增加的学生学号,姓名,三门科目成绩");

scanf("%s%s%f%f%f", num, name, subject1, subject2, subject3);

strcpy(stu[count + j].num, num);

strcpy(stu[count+ j].name, name);

stu[count+ j].score[0] = subject1;

stu[count + j].score[1] = subject2;

stu[count+ j].score[2] = subject3;

k++;

Count_score(1);

}

Save_k(k);

}

else

{

printf("\n输入您想增加的数据条数:");

scanf("%d", i);

for (j = 0; j i; j++)

{

printf("\n输入增加的学生学号,姓名,三门科目成绩");

scanf("%s%s%f%f%f", num, name, subject1, subject2, subject3);

strcpy(stu[j].num, num);

strcpy(stu[j].name, name);

stu[j].score[0] = subject1;

stu[j].score[1] = subject2;

stu[j].score[2] = subject3;

k++;

Count_score(1);

}

}

}

void Screen_search()//查询界面

{

printf("*****************学生成绩查询界面*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ①? 学生学号查询? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ②? 学生姓名查询? ? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

void Screen_rank()//成绩排名方式界面

{

printf("*****************学生成绩排名界面*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ①? ? subject? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ②? ? ? sum? ? ? ? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

void Screen_teacher()

{

printf("*****************教师管理操作界面*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ①? ? 数据载入? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ②? ? 修改数据? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ③? ? 查询数据? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ④? ? 添加数据? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑤? ? 删除数据? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑥? ? 成绩排序? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑦? ? 保存数据? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑧? ? 学生限制? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑨? ? 学生开放? ? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ⑩? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

void Screen_stu_teach()

{

printf("*****************学生成绩管理系统*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ① 教师管理员登录? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ②? 学生端登录? ? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

void Screen_onlyteach()

{

printf("*****************教师登陆操作界面*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ① 教师管理员登录? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

void Screen_stu()

{

printf("*****************学生用户操作界面*******************\n\n\n");

printf("——————————————————————————\n");

printf("|? ? ? ? ? ? ? ①? 学生成绩查询? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ②? 成绩排名查询? ? ? ? ? ? ? ? ? ? |\n");

printf("|? ? ? ? ? ? ? ③? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");

printf("——————————————————————————\n");

}

以上内容仅是本人通过多方浏览网上资料,自己敲出来的。

如有问题,大家可以在评论区下方留言!!!

本人已亲测,可用

C语言编写一个简单的学生成绩管理系统

C语言程序:

#include?stdio.h

#include?string.h

typedef?struct?student

{

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

int?code; /*?学号?*/

int?kor,?eng,?math; /*?3门课程的成绩?*/

}STUDENT;

/*?返回输入数据?*/

STUDENT?Input();

/*?输出所有输入的数据?*/

void?Output(STUDENT?info[],?int?cnt);

/*?将输入分数转换为A-F?*/

char?grade(int?score);

int?main()

{

STUDENT?S[10];

int?cnt?=?0,?select;

int?i,?j;

int?code;

while(1)

{

printf("\t学生信息管理系统\n\n");

printf("\t\t1\t添加\n");

printf("\t\t2\t删除\n");

printf("\t\t3\t查询\n");

printf("\t\t0\t结束\n");

printf("\t\t您的选择[0-3]:");

scanf("%d",?select);

if(select??0?||?select??3)

continue;

if(select?==?0)

{

printf("退出系统!\n");

break;

}

if(select?==?1) /*?添加?*/

{

S[cnt++]?=?Input();

}

else?if(select?==?2) /*?删除?*/

{

printf("\t\t待删除学生的学号:");

scanf("%d",?code);

for(i=0;?icnt;?i++)

if(S[i].code?==?code)

break;

if(i?=?cnt)

{

printf("学号不存在,删除失败!\n");

}

else?{

for(j=i+1;?jcnt;?j++)

{

strcpy(S[j-1].name,?S[j].name);

S[j-1].code?=?S[j].code;

S[j-1].kor?=?S[j].kor;

S[j-1].eng?=?S[j].eng;

S[j-1].math?=?S[j].math;

}

cnt--;

printf("删除成功!\n");

}

}

else /*?查询?*/

{

printf("\t\t待查找学生的学号:");

scanf("%d",?code);

for(i=0;?icnt;?i++)

if(S[i].code?==?code)

break;

if(i?=?cnt)

{

printf("学号不存在,查找失败!\n");

}

else

{

printf("\t查询结果:\n");

Output(S,?i);

}

}

}

return?0;

}

/*?返回输入数据?*/

STUDENT?Input()

{

STUDENT?stu;

printf("\t\t新学生信息\n");

printf("\t\t学号:");

scanf("%d",?stu.code);

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

getchar();

gets(stu.name);

printf("\t\t3门课程成绩(以空格分隔):");

scanf("%d%d%d",?stu.kor,?stu.eng,?stu.math);

return?stu;

}

/*?输出所有输入的数据?*/

void?Output(STUDENT?info[],?int?cnt)

{

printf("学号:%d\n",info[cnt].code);

printf("姓名:");

puts(info[cnt].name);

printf("成绩:%c?%c?%c\n",?grade(info[cnt].kor),?grade(info[cnt].eng),?grade(info[cnt].math));

}

/*?将输入分数转换为A-F?*/

char?grade(int?score)

{

if(score??0?||?score??100)

return?'F';

if(score?=?90)

return?'A';

if(score?=?80)

return?'B';

if(score?=?70)

return?'C';

if(score?=60)

return?'D';

else

return?'E';

}

运行测试:

学生成绩管理系统c语言代码

头文件:::

#ifndef H_STUDENT_HH

#define H_STUDENT_HH

#include "stdio.h"

#include "string.h"

#include "malloc.h"

#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/

#define numsubs 5 /*学科数目*/

typedef struct message_student /*结构体定义*/

{

char number[6];

char name[20];

char sex[4];

float subject[numsubs];

float score;

float average;

int index;

}student;

extern int numstus; /*学生数目*/

extern student *pointer; /*指向结构体数组*/

extern int lens;

int menu_select(); /*函数声明*/

int openfile(student stu[]);

int findrecord(student stud[]);

int writetotext(student stud[]);

void welcome();

void display1();

void showtable();

void sort(student stu[]);

void deleterecord(student stu[],int i);

void addrecord(student stud[]);

void display(student stud[],int n1,int n2);

void amendrecord(student stud[]);

void count(student stud[]);

void sortnum(student stud[]);

void sortnum2(student stud[]);

void sortname(student stud[]);

void sortname2(student stud[]);

void sortcount(student stud[]);

void sortcount2(student stud[]);

void statistic(student stud[]);

void display1();

#endif

#include "head.h"

int menu_select()

{

char c;

printf("\n\n");

printf(" | 1. 增加学生记录 5.统计信息 |\n");

printf(" | 2. 查询学生记录 6.打开文件 |\n");

printf(" | 3. 修改学生记录 7.保存文件 |\n");

printf(" | 4. 学生纪录排序 8.显示记录 |\n");

printf(" | 0.退出系统 |\n");

printf("\n\n");

printf("请选择(0-8):");

c=getchar();

getchar();

return (c-'0');

}

#include "head.h"

int findrecord(student stud[]) /*查找信息*/

{

char str[2];

int i,num;

if(numstus==0)

{

printf("没有可被查找的记录\n");

return -1;

}

else

{

printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");

gets(str);

if(str[0]=='1') /*按学号查找*/

{

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

gets(str);

for(i=0;i=numstus;i++)

if(strcmp(str,stud[i].number)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='2') /*按姓名查找*/

{

printf("请输入姓名:");

gets(str);

for(i=0;i=numstus;i++)

if(strcmp(str,stud[i].name)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='3') /*按名次查找*/

{

printf("请输入名次:");

scanf("%d",num);

getchar();

for(i=0;i=numstus;i++)

if(num==stud[i].index)

{

display(stud,i,i);

break;

}

else continue;

}

if(inumstus)

{

printf("没有查找所要的信息。\n");

return -1;

}

return i;

}

}

#include"head.h"

int openfile(student stu[])

{

int i=0,j;

FILE *fp;

char filename[20],str[2];

if(numstus!=0)

{

printf("已经有记录存在,是否保存?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(stu);

}

printf("请输入文件名:");

gets(filename);

numstus=0;

if((fp=fopen(filename,"rb+"))==NULL)

{

printf("无法打开该文件\n");

return(-1);

}

fscanf(fp,"%d",numstus);

fgetc(fp);

while(inumstus)

{

fscanf(fp,"%s",stu[i].number);

fscanf(fp,"%s",stu[i].name);

fscanf(fp,"%s",stu[i].sex);

for(j=0;jnumsubs;j++)

fscanf(fp,"%f",stu[i].subject[j]);

fscanf(fp,"%f",stu[i].score);

fscanf(fp,"%f",stu[i].average);

fscanf(fp,"%d",stu[i].index);

i++;

}

fclose(fp);

printf("文件读取成功\n");

printf("是否显示纪录?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

display(stu,0,numstus-1);

return(0);

}

#include "head.h"

void sort(student stud[])

{

int i,j=0;

char str[5];

student *p;

p=stud;

if(numstus==0)

{

printf("没有可供查询的记录!");

}

while(1)

{

for(i=0;;i++)

{

printf(" 请输入查询方式:");

printf("(直接输入回车则结束查询操作)\n");

printf("1.按照学号\t");

printf("2.按照姓名\t");

printf("3.按照名次\n");

gets(str);

if(strlen(str)==0) break;

if(str[0]=='1')

{

printf("请输入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortnum2(p);

else

sortnum(p);

display(stud,0,numstus-1);

}

else if(str[0]=='2')

{

printf("请输入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortname2(p);

else

sortname(p);

display(stud,0,numstus-1);

}

else if(str[0]=='3')

{

printf("请输入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortcount2(p);

else

sortcount(p);

display(stud,0,numstus-1);

}

else printf("请输入1~3");

printf("是否退出排序?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') break;

}

return;

}

}

void sortnum(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

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

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortnum2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

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

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortname(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

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

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortname2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

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

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortcount(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

if(stud[j+1].indexstud[j].index)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortcount2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

for(i=0;inumstus;i++)

for(j=0;jnumstus-i-1;j++)

{

if(stud[j].indexstud[j+1].index)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

#include"head.h"

void statistic(student stud[]) /*新增功能,输出统计信息*/

{

int i,j=0,k=0;

char c1,str[2];

float average[numsubs],sum=0;

if(numstus==0)

printf("没有可被查找的记录\n");

else

{

while(1)

{

printf("下面将统计考试成绩\n");

printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");

c1=getchar();

printf("\t一共有个%d记录\n",numstus); /*总共记录数*/

switch(c1)

{

case '1':

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

{

sum+=stud[i].subject[0];

if(stud[k].subject[0]stud[i].subject[0]) k=i;

if(stud[j].subject[0]stud[i].subject[0]) j=i;

}

average[0]=sum/numstus;

printf("\t科目A的最高分:\n"); /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);

printf("\t科目A的最低分是:\n"); /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);

printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/

break;

case '2':

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

{

sum+=stud[i].subject[1];

if(stud[k].subject[1]stud[i].subject[1]) k=i;

if(stud[j].subject[1]stud[i].subject[1]) j=i;

}

average[1]=sum/numstus;

printf("\t科目B的最高分:\n"); /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);

printf("\t科目B的最低分是:\n"); /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);

printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/

break;

case '3':

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

{

sum+=stud[i].subject[2];

if(stud[k].subject[2]stud[i].subject[2]) k=i;

if(stud[j].subject[2]stud[i].subject[2]) j=i;

}

average[2]=sum/numstus;

printf("\t科目C的最高分:\n"); /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);

printf("\t科目C的最低分是:\n"); /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);

printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/

break;

case '4':

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

{

sum+=stud[i].subject[3];

if(stud[k].subject[3]stud[i].subject[3]) k=i;

if(stud[j].subject[3]stud[i].subject[3]) j=i;

}

average[3]=sum/numstus;

printf("\t科目D的最高分:\n"); /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);

printf("\t科目D的最低分是:\n"); /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);

printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/

break;

case '5':

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

{

sum+=stud[i].subject[4];

if(stud[k].subject[4]stud[i].subject[4]) k=i;

if(stud[j].subject[4]stud[i].subject[4]) j=i;

}

average[4]=sum/numstus;

printf("\t科目E的最高分:\n"); /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);

printf("\t科目E的最低分是:\n"); /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);

printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/

break;

default:printf("输入错误!请输入1~5之间的数\n");

}

sum=0;

getchar();

printf("是否继续进行统计?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') ;

else break;

}

}

}

#include"head.h"

int writetotext(student stud[]) /*将所有记录写入文件*/

{

int i=0,j;

FILE *fp;

char filename[20];

printf("输入文件名称:");

gets(filename);

fp=fopen(filename,"w");

fprintf(fp,"%d\n",numstus);

while(inumstus)

{

fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);

for(j=0;jnumsubs;j++)

fprintf(fp,"%f ",stud[i].subject[j]);

fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);

i++;

}

fclose(fp);

printf("已成功存储!\n");

display(stud,0,numstus-1);

numstus=0;

return 0;

}

#include"head.h"

void welcome()

{

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

printf("\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n");

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

}

void showtable()

{

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

printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n");

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

}

void display(student stud[],int n1,int n2)

{

int i;

showtable(); /*显示表头*/

for(i=n1;i=n2;i++)

printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);

/*通过循环输出数据*/

}

void display1()

{

printf("\t\t本系统由计应精英一组亲情制作\n\n");

printf("\t\t制作人员列表: (按比划)\n");

printf("\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n");

printf("\n\n");

getchar();

}

#include"head.h"

#include

void amendrecord(student stud[])

{

char str[5]; /*供用户输入*/

int i=-1,j;

if(numstus==0) /*没有记录返回*/

printf("没有可供修改的记录!");

while(i0)

{

i=findrecord(stud);

if(i=0)

{

printf("要删除这个学生的信息吗?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

deleterecord(stud,i);

count(stud);

}

else

{

printf("确定要修改这个学生的信息吗?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

printf("下面请重新输入学生的信息:\n");

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

gets(stud[i].number);

printf("请输入姓名:");

gets(stud[i].name);

printf("请输入性别(男/女 1/0):");

gets(str);

if(str[0]=='0')

strcpy(stud[i].sex,"女");

else

strcpy(stud[i].sex,"男");

stud[i].score=0;

printf("请按顺序输入成绩:");

for(j=0;jnumsubs;j++)

{

scanf("%f",stud[i].subject[j]);

stud[i].score+=stud[i].subject[j];

}

getchar();

stud[i].average=stud[i].score/numsubs;

}

count(stud);

}

display(stud,0,numstus-1);

}

printf("是否继续进行其他修改?(y/n)\n");

gets(str);

if(str[0]=='y'||str[0]=='Y')

i=-1;

else i=1;

}

}

void deleterecord(student stu[],int i) /*删除信息*/

{

int j;

while(i=0)

{

for(j=i;jnumstus;j++)

stu[j]=stu[j+1];

numstus--;

printf("删除成功!\n");

}

}

void count(student stud[])

{

int i,j;

for(i=0;inumstus;i++)

{

stud[i].index=1;

for(j=0;jnumstus;j++)

if(stud[j].scorestud[i].score)

stud[i].index++;

}

}

#include "head.h"

void addrecord(student stud[])

{

int i=0,j,num;

char str[5];

if(numstus!=0)

{

printf("已有记录存在是否覆盖?(y/n)\n");

gets(str);

if(str[0]=='Y'||str[0]=='y')

i=0;

else i=numstus;

}

printf("请输入增加的学生信息条目数:");

scanf("%d",num);

if(i==0)

numstus=num;

else numstus+=num;

if(numstuslens)

{

lens+=50;

pointer=(student *)realloc(pointer,lens*LEN);

}

printf("请输入学生信息:\n");

for(;inumstus;i++)

{

getchar();

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

gets(pointer[i].number);

printf("请输入姓名:");

gets(pointer[i].name);

printf("请输入性别(男/女 1/0):");

gets(pointer[i].sex);

if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");

else strcpy(pointer[i].sex,"男");

printf("请输入各科成绩:(按ABCDE的顺序):");

stud[i].score=0;

for(j=0;jnumsubs;j++)

{

scanf("%f",stud[i].subject[j]); /*计算总分*/

stud[i].score+=stud[i].subject[j];

}

stud[i].average=stud[i].score/numsubs; /*计算平均分*/

}

count(stud); /*附名次*/

display(stud,0,numstus-1);

getchar();

}#include "head.h"

int numstus;

int lens;

student *pointer;

void main()

{

int i=1;

char str[2];

lens=100;

pointer=(student *)malloc(lens*LEN); /*分配内存*/

numstus=0;

welcome(); /*欢迎界面*/

while(i0)

{

i=menu_select(); /*控制菜单*/

switch(i)

{

case 1:addrecord(pointer);break; /*增加学生信息*/

case 2:findrecord(pointer);break; /*查询学生信息*/

case 3:amendrecord(pointer);break; /*修改学生信息*/

case 4:sort(pointer);break; /*学生信息排序*/

case 5:statistic(pointer);break; /*统计信息*/

case 6:openfile(pointer);break; /*打开文件*/

case 7:writetotext(pointer);break; /*保存文件*/

case 8:display(pointer,0,numstus-1);break; /*显示记录*/

case 0:

if(numstus!=0) printf("是否保存当前记录?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(pointer);

i=-1;break; /*退出系统*/

default:printf("请输入数字0~8:\n");i=1; /*输入错误*/

}

}

printf("\t\t欢迎再次使用本系统。\n\n");

display1();

}

自己一改就能用,给我加分哈!

(责任编辑:IT教学网)

更多

推荐HTML/Xhtml文章