c语言简单成绩管理系统代码(简易成绩管理系统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语言设计一个学生成绩管理系统
#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语言编写一个学生成绩管理系统
以下是我做过的成品
#include "stdio.h"
#include "stdlib.h"
#include "string.h"#define N 100 ? //最大学生数量
#define LEN sizeof(struct student)
FILE *fp;
int n=0; ? ? ? ? ?//学生数量
struct student
{
int num;
char name[20];
int x_num;
int class_num;
float score1;
float score2;
float score3;
float total;
float average;
}stu[N]; ? ? ? //学生信息结构体/*1.学生信息存入文件*/
void creat() ?
{
int i,j;
struct student t;
printf("输入学生的数量。(不超过%d)\n",N);
scanf("%d",n);
if(nN) exit(0);
printf("依次输入学生信息:学号 姓名 学院代号 班级号 高数成绩 英语成绩 C语言成绩\n");
for(i=0;in;i++)
{
scanf("%d %s %d %d %f %f %f",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3);
stu[i].total=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].average=stu[i].total/3;
}
for(j=0;jn-1;j++)
for(i=j;in-j-1;i++)
{
if(stu[i].num stu[i+1].num)
{
t=stu[i];
stu[i]=stu[i+1];
stu[i+1]=t;
}
}
if((fp=fopen("student_number","wb"))==NULL) ?//保存学生数量n
{
printf("can't open file!\n");
exit(0);
}
fwrite(n,sizeof(int),1,fp);
if((fp=fopen("student","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fwrite(stu[i],LEN,1,fp);
fclose(fp);
}
/*2.增加一个学生信息*/
void add()
{
int i,j;
char ch;
struct student t;
if((fp=fopen("student_number","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fread(n,sizeof(n),1,fp);
if((fp=fopen("student","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fread(stu[i],LEN,1,fp);
printf("依次输入学生信息:学号 姓名 学院代号 班级号 高数成绩 英语成绩 C语言成绩\n");
scanf("%d %s %d %d %f %f %f",t.num,t.name,t.x_num,t.class_num,t.score1,t.score2,t.score3);
t.total=t.score1+t.score2+t.score3;
t.average=t.total/3;
if(t.numstu[n-1].num)
{
n=n+1;
stu[n-1]=t;
}
else
for(i=0;in;i++)
{
printf("aw\n");
if(t.numstu[i].num)
{
n=n+1;
for(j=n-2;ji-1;j--) stu[j+1]=stu[j];
stu[i]=t;
break;
}
}
if((fp=fopen("student_number","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fwrite(n,sizeof(n),1,fp);
if((fp=fopen("student","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fwrite(stu[i],LEN,1,fp);
fclose(fp);
begin:
printf("@是否继续“添加”操作(y/n)?\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') add();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
/*3.删除学生信息*/
void del() ?
{
int i,numb,mark=0;
char ch;
printf("输入要删除学生的学号:\n");
scanf("%d",numb);
if((fp=fopen("student_number","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fread(n,sizeof(n),1,fp);
if((fp=fopen("student","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
{
fread(stu[i],LEN,1,fp);
if(stu[i].num==numb)
{
i--;
n--;
mark=1;
}
}
if(mark==0) printf("没有该生信息\n");
if((fp=fopen("student_number","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fwrite(n,sizeof(n),1,fp);
if((fp=fopen("student","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fwrite(stu[i],LEN,1,fp);
fclose(fp);
begin:
printf("@是否继续“删除”操作(y/n)?\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') del();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
/*4.修改学生信息*/
void change() ?
{
int i,numb,mark=0;
float score1,score2,score3,totall,average;
char ch;
printf("输入要修改学生的学号 高数成绩 英语成绩 C语言成绩:\n");
scanf("%d %f %f %f",numb,score1,score2,score3);
if((fp=fopen("student_number","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fread(n,sizeof(n),1,fp);
if((fp=fopen("student","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
{
fread(stu[i],LEN,1,fp);
if(stu[i].num==numb)
{
totall=score1+score2+score3;
average=totall/3;
stu[i].score1=score1;
stu[i].score2=score2;
stu[i].score3=score3;
stu[i].total=totall;
stu[i].average=average;
mark=1;
}
}
if(mark==0) printf("没有该生信息\n");
if((fp=fopen("student_number","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fwrite(n,sizeof(n),1,fp);
if((fp=fopen("student","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fwrite(stu[i],LEN,1,fp);
fclose(fp);
begin:
printf("@是否继续“修改”操作(y/n)?\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') del();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
/*5.查询操作*/
//(1)按学号查询,输入一个学号,输出对应的学生信息。
void num_search() ?
{
int i,num,mark=0;
printf("输入学号:\n");
scanf("%d",num);
for(i=0;in;i++)
if(stu[i].num==num)
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2哗笭糕蝗蕹豪革通宫坤f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
mark=1;
}
if(mark==0) printf("没有找到相关信息。\n");
}
//(2)按全名查询。
void name_search()
{
int i,mark=0;
char name[20];
printf("输入姓名:\n");
scanf("%s",name);
for(i=0;in;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
mark=1;
}
if(mark==0) printf("没有找到相关信息。\n");
}
//(3)按姓氏查询。
void firstname_search()
{
int i,mark=0;
char name[20];
printf("输入姓氏:\n");
scanf("%s",name);
for(i=0;in;i++)
if(stu[i].name[0]==name[0] stu[i].name[1]==name[1])
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
mark=1;
}
if(mark==0) printf("没有找到相关信息。\n");
}
//(4)按学院查询,输入学院名称,输出该学院的全部学生的信息。
void x_search()
{
int i,x_num,mark=0;
printf("输入学院代号:\n");
scanf("%d",x_num);
for(i=0;in;i++)
if(stu[i].x_num==x_num)
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
mark=1;
}
if(mark==0) printf("没有找到相关信息。\n");
}
//(5)按班级查询,输入班级名称,输出该班级的全部学生的信息。
void classnum_search()
{
int i,class_num,mark=0;
printf("输入学院代号:\n");
scanf("%d",class_num);
for(i=0;in;i++)
if(stu[i].class_num==class_num)
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
mark=1;
}
if(mark==0) printf("没有找到相关信息。\n");
}
//查询模块
void search() ? ?
{
char ch;
int i;
if((fp=fopen("student_number","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fread(n,sizeof(n),1,fp);
if((fp=fopen("student","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fread(stu[i],LEN,1,fp);
fclose(fp);
printf("选择要进行查询的关键字代号:1、学号查询。2、按全名查询。3、按姓氏查询。4、学院查询。5、班级查询。\n");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1': ?num_search(); ?break;
case '2': ?name_search(); ?break;
case '3': ?firstname_search(); ?break;
case '4': ?x_search(); ?break;
case '5': ?classnum_search(); ?break;
default :printf("输入代号有误。\n");
}
begin:
printf("@是否继续“查询”操作(y/n)?\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') search();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
/*6.统计*/
//(1)按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。
void totall_score()
{
int i,j;
struct student t;
for(j=0;jn-1;j++)
for(i=0;in-j-1;i++)
if(stu[i].totalstu[i+1].total)
{
t=stu[i];
stu[i]=stu[i+1];
stu[i+1]=t;
}
if((fp=fopen("student_number","wb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fwrite(n,sizeof(n),1,fp);
if((fp=fopen("student_totalscore","wb"))==NULL) ?//按总分排序并保存至新的文件夹中。
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
{
printf("学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
fwrite(stu[i],LEN,1,fp);
}
fclose(fp);
}
//(2)按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。
void each_score()
{
int e,d,c,b,a,i;
a=b=c=d=e=0;
for(i=0;in;i++)
{
if(stu[i].average60) e++;
else if(stu[i].average70) d++;
else if(stu[i].average80) c++;
else if(stu[i].average90) b++;
else a++;
}
printf("不及格人数为%d\n 60-69人数为%d\n 70-79人数为%d\n 80-89人数为%d\n 90-100人数为%d\n",e,d,c,b,a);
}
//(3)分别找出3门课程成绩最高的学生,并输出他们的信息。
void high_stu()
{
int max1,max2,max3,i;
max1=max2=max3=0;
for(i=0;in;i++)
{
if(stu[max1].score1stu[i].score1) max1=i;
if(stu[max2].score2stu[i].score2) max2=i;
if(stu[max3].score3stu[i].score3) max3=i;
}
printf("高数最高成绩学生信息:\n学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[max1].num,stu[max1].name,stu[max1].x_num,stu[max1].class_num,stu[max1].score1,stu[max1].score2,stu[max1].score3,stu[max1].total,stu[max1].average);
printf("英语最高成绩学生信息:\n学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f总分:%0.2f 平均分:%0.2f\n",stu[max2].num,stu[max2].name,stu[max2].x_num,stu[max2].class_num,stu[max2].score1,stu[max2].score2,stu[max2].score3,stu[max2].total,stu[max2].average);
printf("c语言最高成绩学生信息:\n学号:%d 姓名:%s 学院代号:%d 班级号:%d 高数成绩:%0.2f 英语成绩:%0.2f c语言成绩:%0.2f 总分:%0.2f 平均分:%0.2f\n",stu[max3].num,stu[max3].name,stu[max3].x_num,stu[max3].class_num,stu[max3].score1,stu[max3].score2,stu[max3].score3,stu[max3].total,stu[max3].average);
}
//(4)分别统计出3门课程的不及格率,并输出。
void filled()
{
int i;
float f1,f2,f3,sf1,sf2,sf3;
f1=f2=f3=0;
for(i=0;in;i++)
{
if(stu[i].score160) f1++;
if(stu[i].score260) f2++;
if(stu[i].score360) f3++;
}
sf1=f1/n;
sf2=f2/n;
sf3=f3/n;
printf("高数不及格率为%0.2f\n",sf1);
printf("英语不及格率为%0.2f\n",sf2);
printf("c语言不及格率为%0.2f\n",sf3);
}
//统计模块
void stat() ?
{
char ch;
int i;
if((fp=fopen("student_number","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
fread(n,sizeof(n),1,fp);
if((fp=fopen("student","rb"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;in;i++)
fread(stu[i],LEN,1,fp);
printf("选择要进行的统计操作代号:\n1、按总分由高到低。\n2、按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。\n3、找出3门课程成绩最高的学生。\n4、统计出3门课程的不及格率。\n");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1': ?totall_score(); ?break;
case '2': ?each_score(); ?break;
case '3': ?high_stu(); ?break;
case '4': ?filled(); ?break;
default :printf("输入代号有误。\n");
}
begin:
printf("@是否继续“统计”操作(y/n)?\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') stat();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
/*主选项*/
void action() ?
{
char ch;
printf("输入想要进行操作的代码:\n1、输入学生信息;\n2、增加学生信息;\n3、删除学生信息;\n4、修改学生信息;\n5、按不同条件对学生信息进行查询操作;\n6、按不同条件对学生成绩进行统计工作。\n");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1':creat();break; ?//输入学生信息
case '2':add();break; ? ?//增加学生信息
case '3':del();break; ? ?//删除学生信息
case '4':change();break; //修改学生信息
case '5':search();break; //按不同条件对学生信息进行查询操作
case '6':stat();break; ? //按不同条件对学生成绩进行统计工作
default:printf("输入代号有误。\n");
}
begin:
printf("#是否继续进行“管理”操作?(y/n)\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y') action();
else if(ch=='n'||ch=='N') ;
else { printf("输入有误!\n"); goto begin;}
}
//主函数
void main()
{
printf("~~~~~~学生成绩管理系统~~~~~~\n\n");
action();
}
评论0 ? ? ? ? ? ? ? ? ? ? 举报 ? ? ? ? ?
5 ? ? ? ? 0 ?
加载更多
最新回答 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1条回答) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
匿名用户 ? ? ? ? ? ? ? ? 1级 ?
2010-12-22 回答
#includeiostream
#includecstring
#includemalloc.h
using namespace std;
struct lx
{
long num;
char name[20];
struct lx *link;
};
struct lx *addlist(struct lx *head,long x);//添加节点;
void listclear(struct lx *head);
struct lx *createlist(void );
void listprintf(struct lx *p);
int main(int argc,char **argv)
{
long x;
struct lx *p = createlist();
listprintf(p);
cout"输入学号"endl;
cin x;
struct lx *head = addlist(p,x);
listprintf(head);
listclear(head);
//listprintf(temp);
return 0;
}
struct lx *createlist(void )
{
struct lx *head ;
struct lx *tail ;
struct lx *p;
char buf[20];
head = NULL;
p = (struct lx *)malloc(sizeof (struct lx));
// cout "内存分配失败!!!!" endl;
cout "请输入学号:";
cin p-num;
cout "请输入姓名:";
cin p-name;
//coutbufendl;
//strcpy(p-name, buf);
while(1)
{
if(head == NULL)
{
head = p;
tail = p;
}
else
{
tail-link = p;
tail = p;
}
p = (struct lx*)malloc(sizeof(struct lx));
// cout"内存分配失败!!!!!" endl;
cout "请输入学号:";
cin p-num;
if(p-num == 0)
break;
cout "请输入姓名:";
cin p-name;
//strcpy(p-name,buf);
}
tail-link = NULL;
return head;
}
void listprintf(struct lx *p)
{
struct lx* q = p;
while(q!= NULL)
{
cout q-numendl;
cout q-nameendl;
q = q-link;
}
}
struct lx *addlist(struct lx *head,long x)//添加节点
{
struct lx *p = head;
struct lx *q,*temp,*temp1;
q = NULL;
if(p-link == NULL )
{
if((p-num ) x )
{
q=(struct lx *)malloc(sizeof(struct lx));
cout"输入姓名:"endl;
cinq-name;
q-num = x;
q-link = p;
p = q;
}
else
{
q=(struct lx *)malloc(sizeof(struct lx));
cout"输入姓名:"endl;
cinq-name;
q-num = x;
temp1 = p-link;
p-link = q;
q-link = temp1;
temp1-link = NULL;
}
}
else if(((p-num) x)((p-link)-link == NULL))
{
q=(struct lx *)malloc(sizeof(struct lx));
cout"输入姓名:"endl;
cinq-name;
q-num = x;
p-link = q;
q-link = p;
q-link = NULL;
}
哗笭糕蝗蕹豪革通宫坤 ? ? ? else
{
while(1)
{
if((p-num x)((p-link)-num x))
break;
p = p-link;
}
q=(struct lx *)malloc(sizeof(struct lx));
cout"输入姓名:"endl;
cinq-name;
q-num = x;
temp = p-link;
p-link = q;
q-link = temp;
}
return p;
}
void listclear(str
怎样用C语言写学生成绩管理系统?
程序如下: #include\x0d\x0avoid main()\x0d\x0a{\x0d\x0a float student[100][7];\x0d\x0a//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,\x0d\x0a//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\x0d\x0a int n,i,j,k,p,t,count,flag;\x0d\x0a int a[100],b[100],c[100];\x0d\x0a//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据\x0d\x0a printf("输入学生的个数:\n");\x0d\x0a scanf("%d",n);\x0d\x0a for(i=0;ib[i+1])\x0d\x0a {\x0d\x0a c[i]=count;\x0d\x0a count++;\x0d\x0a }\x0d\x0a }\x0d\x0a printf("\n以下是统计结果:\n");\x0d\x0a printf("学号 s[1] s[2] s[3] s[4] 总分 平均分 排名\n");\x0d\x0a for(i=0;i
回答于?2022-11-16
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语言编写一个简单的成绩管理系统
(ps:没有自己编译过)
//我写 C++比较多
#include stdio.h
#include stdlib.h
#include string.h
#include conio.h
#define TOTAL_STUD 1000
typedef struct stud {
char name[20];
int score;
} students[TOTAL_STUD],sorted[TOTAL_STUD];
void delstud (int i) {
students[i].name = "无效学生";
students[i].score = -999;
return;
}
#define show(listname,i)?printf("%04d????%s????%d\n",i,listname[i].name,listname[i].score);
int cmpfunc (const void * a, const void * b)
{
return ( *(stud*)a.score - *(stud*)b.score );
} // 本段代码修改自此处
void run(int menu) {
switch (menu) {
case 1:
char uname[20];
int uid,uscore;
printf("请输入学生姓名:");
scanf("%s",uname);
printf("\n 请输入学生学号:");
scanf("%d",uid);
printf("\n 请输入学生成绩:");
scanf("%d",uscore);
students[uid].name = uname;
students[uid].score = uscore;
printf("\n\n插入成功!\n\n");
break;
case 2:
int delid;
printf("要删除谁?学号?");
scanf("%d",delid);
delstud(delid);
break;
case 3:
for (int i = 0; i TOTAL_STUD; i++) {
strcpy(sorted[i].name,students[i].name);
sorted[i].score=students[i].score;
}
qsort(sorted,TOTAL_STUD,sizeof(stud),cmpfunc);
printf("学号 姓名 分数\n");
for (int i = 0; i TOTAL_STUD; i++) {
if (sorted[i].score -900) show(sorted,i);
}
break;
case 4:
for (int i = 0; i TOTAL_STUD; i++) {
if (students[i].score -900) show(students,i);
}
break;
case 5:
int delid;
printf("要查询谁?学号?");
scanf("%d",delid);
show(students,delid);
break;
default:
printf("-- %d 无此功能。请重试。--",menu);
}
return;
}
int main() {
int key = -1;
for (int i = 0; i TOTAL_STUD; i++) {
delstud(i);
}
while (key != 0) {
printf("---成绩管理系统 V0.9 ---\n 请选择:\n1 -- 录入\n2 -- 删除\n3 -- 排序输出\n4 -- 不排序输出\n5 -- 查询\n0 -- 退出");
key=getch()-48;
if (key0) run(key);
else {
printf("谢谢使用!再见!");
return 0;
}
}
return 0;
}