基于C语言实现学生成绩管理系统

本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下

这里只贴代码,具体介绍省略。

#include <stdio.h>

#include <io.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 200

struct student

{

char no[10]; // 学号

char name[50]; // 姓名

float score[3]; // 分数

float math;

float eng;

float phy;

};

struct data

{

int count; // 当前学生数组中学生的个数

struct student stu[MAX]; // 学生数组

}dd;

// 显示主菜单

void menu()

{

system("cls");//清屏

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

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

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

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

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

printf("\t\t\t [1] 查看所有学生信息 \n");

printf("\t\t\t [2] 输入学生记录 \n");

printf("\t\t\t [3] 删除学生记录 \n");

printf("\t\t\t [4] 修改学生记录 \n");

printf("\t\t\t [5] 查询学生成绩(学号) \n");

printf("\t\t\t [6] 查询成学生绩(姓名) \n");

printf("\t\t\t [7] 查看成绩排序(学号) \n");

printf("\t\t\t [0] 退出 \n");

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

}

// 等待用户按回车后回到主菜单

void to_menu()

{

char c1,c2;

printf("\n\n\n按回车键返回主菜单...");

scanf("%c%c",&c1,&c2);//第一个字符吸收上次的确认回车键

menu();

}

//统计信息

void ren()

{

int A=0,B=0,C=0,D=0,E=0,s;

int i;

for(i=0;i<dd.count;i++)

{

s=(int)(dd.stu[i].math/10);

switch(s)

{

case 10:

case 9:

A++;

break;

case 8:

B++;

break;

case 7:

C++;

break;

case 6:

D++;

break;

default :

E++;

break;

}

}

printf("总人数:%d\n",dd.count);

printf("获得“优秀”的人数:%d\n",A);

printf("获得“良”的人数:%d\n",B);

printf("获得“中”的人数:%d\n",C);

printf("获得“及格”的人数:%d\n",D);

printf("不及格的人数:%d\n",E);

}

// 查看所有学生信息

void view_data()

{

int i;

printf("学号\t姓名\t数学\t英语\t物理");

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

for(i=0;i<dd.count;i++)

printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].math,dd.stu[i].eng,dd.stu[i].phy);

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

ren();

}

// 将数据从结构体数组保存到文件中

void save_data()

{

FILE *fp;//文件指针

int i,k;

k = dd.count; //其实k没有什么实际的意义,直接在fwrite里使用&dd.count就可以了。

fp=fopen("D:\\data.txt","w");//文件存储位置:当前文件夹

fwrite(&k,sizeof(int),1,fp);

for(i=0;i<dd.count;i++)

fwrite(&dd.stu[i],sizeof(struct student),1,fp);

fclose(fp);

}

// 输入学生记录

void add_data()

{

int b;

int k = dd.count;

while(k<MAX)

{

printf("请输入学生学号:"); scanf("%s",dd.stu[k].no);

printf("请输入学生姓名:"); scanf("%s",dd.stu[k].name);

printf("请输入数学成绩:"); scanf("%f",&dd.stu[k].math);

printf("请输入英语成绩:"); scanf("%f",&dd.stu[k].eng);

printf("请输入物理成绩:"); scanf("%f",&dd.stu[k].phy);

dd.count++; //需要提前置0,在主函数中。

k = dd.count;

printf("\n\n继续添加学生信息[1-yes 0-no]:");

scanf("%d",&b);

if(b==0) break;

}

save_data();

}

// 将数据从文件读到结构体数组中

void read_data()

{

FILE *fp;

int i,k;

k=0;

if((fp=fopen("D:\\data.txt","r"))==NULL) // 如果文件不存在

{

dd.count = 0;

}

else

{

fread(&k,sizeof(int),1,fp);

dd.count = k;

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

{

fread(&dd.stu[i],sizeof(struct student),1,fp);

}

fclose(fp);

}

}

// 删除学生记录

void delete_data()

{

int i,k;

char no[10];

printf("\n请输入要删除学生的学号:");

scanf("%s",no);

k = -1;

for(i=0;i<dd.count;i++)

{

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

{

k = i;

break;

}

}

if(k==-1)

{

printf("\n\n没有找到该学生(学号-%s)!",no);

}

else

{

//你没有写删除的操作啊

for(i=k; i<dd.count-1; i++) //将后面的数据前移一位

dd.stu[i] = dd.stu[i+1];

memset(&dd.stu[dd.count-1],0,sizeof(struct student)); //将dd.stu[dd.count-1]数据置0

dd.count--;

save_data();

printf("\n\n删除学生(学号-%s)记录成功!",no);

}

}

// 修改学生记录

void edit_data()

{

int i,k;

char no[10],name[50];

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

scanf("%s",no);

k=-1;

for(i=0;i<dd.count;i++)

{

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

{

k=i;

break;

}

}

if(k==-1)

{

printf("\n\n没有找到该学生(学号-%s)!",no);

}

else

{

printf("\n请输入学生数据:");

printf("\n姓名");

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

scanf("%s",name);

strcpy(dd.stu[k].name,name);

save_data();

printf("\n\n修改学生记录(学号-%s)成功!",no);

}

}

// 查询学生成绩(学号)

void query_data_no()

{

int i,k;

char no[10];

printf("\n请输入要查询学生的学号:");

scanf("%s",no);

k=-1;

for(i=0;i<dd.count;i++)

{

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

{

printf("\n\n学号\t姓名\t数学\t英语\t物理");

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

k=i;

printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].math,dd.stu[i].eng,dd.stu[i].phy);

break; // 学号应该是唯一的,找到了一个就代表以后的没有了。

}

}

if(k==-1)

{

printf("\n\n没有找到该学生(学号-%s)!",no);

}

}

// 查询学生成绩(姓名)

void query_data_name()

{

int i,k;

char name[10];

printf("\n请输入要查询学生的姓名:");

scanf("%s",name);

k=-1;

for(i=0;i<dd.count;i++)

{

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

{

printf("\n\n学号\t姓名\t数学\t英语\t物理");

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

k=i;

printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].math,dd.stu[i].eng,dd.stu[i].phy);

break;

}

}

if(k==-1)

{

printf("\n\n没有找到该学生(姓名-%s)!",name);

}

}

// 排序(学号)

void sort_data_no(struct data Buff)

{

int i;

int j;

int k;

int h;

struct student temp;

FILE *fp;

if((fp=fopen("D:\\data.txt","w+"))==NULL)

{

printf("cannot open file!\n");

exit(0);

}

printf("请输入要查询的科目:1-数学,2-英语,3-物理:");

scanf("%d",&k);

switch(k)

{

case 1:

for(i=0; i<Buff.count-1; i++)

for(j=i+1; j<Buff.count; j++)

if(Buff.stu[i].math > Buff.stu[j].math)

{

temp=Buff.stu[i];

Buff.stu[i]=Buff.stu[j];

Buff.stu[j]=temp;

}

printf("名次\t学号\t 姓名\t数学\n");

for(i=0; i<Buff.count; i++)

printf("%d\t%s\t%s\t%-7.1f\n",i+1,Buff.stu[i].no,Buff.stu[i].name,Buff.stu[i].math);

break;

case 2:

for(i=0; i<Buff.count-1; i++)

for(j=i+1; j<Buff.count; j++)

if(Buff.stu[i].eng > Buff.stu[j].eng)

{

temp=Buff.stu[i];

Buff.stu[i]=Buff.stu[j];

Buff.stu[j]=temp;

}

printf("名次\t学号\t 姓名\t英语\n");

for(i=0; i<Buff.count; i++)

printf("%d\t%s\t%s\t%-7.1f\n",i+1,Buff.stu[i].no,Buff.stu[i].name,Buff.stu[i].eng);

break;

case 3:

for(i=0; i<Buff.count-1; i++)

for(j=i+1; j<Buff.count; j++)

if(Buff.stu[i].phy > Buff.stu[j].phy)

{

temp=Buff.stu[i];

Buff.stu[i]=Buff.stu[j];

Buff.stu[j]=temp;

}

printf("名次\t学号\t 姓名\t物理\n");

for(i=0; i<Buff.count; i++)

printf("%d\t%s\t%s\t%-7.1f\n",i+1,Buff.stu[i].no,Buff.stu[i].name,Buff.stu[i].phy);

break;

default :

printf("输入错误!");

exit(0);

}

printf("请按任意键继续....");

getch();

fclose(fp);

}

// 主函数

int main(void)

{

int fun;

dd.count = 0;

read_data();

menu();

while(1)

{

printf("请输入功能号[0-7]:");//这里不需要什么&fun,

scanf("%d",&fun);

switch(fun)

{

case 1: view_data();break; // 查看所有学生信息

case 2: add_data(); break; // 输入学生记录

case 3: delete_data();break; // 删除学生记录

case 4: edit_data();break; // 修改学生记录

case 5: query_data_no();break; // 查询学生成绩(学号)

case 6: query_data_name();break; // 查询成学生绩(姓名)

case 7: sort_data_no(dd); break; // 查看成绩排序(学号) //直接将结构体dd发送过去就可以了

case 0: break; // 退出

}

if(fun==0) break;

to_menu();

}

return 0;

}

更多学习资料请关注专题《管理系统开发》。

以上是 基于C语言实现学生成绩管理系统 的全部内容, 来源链接: utcz.com/z/342411.html

回到顶部