本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下
这里只贴代码,具体介绍省略。
#include <stdio.h>#include <io.h>#include <conio.h>#include <stdlib.h>#include <string.h>#define MAX 200struct 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("nnn");
printf("ttt *******************************n");
printf("ttt n");
printf("ttt 学生成绩管理系统 n");
printf("ttt n");
printf("ttt [1] 查看所有学生信息 n");
printf("ttt [2] 输入学生记录 n");
printf("ttt [3] 删除学生记录 n");
printf("ttt [4] 修改学生记录 n");
printf("ttt [5] 查询学生成绩(学号) n");
printf("ttt [6] 查询成学生绩(姓名) n");
printf("ttt [7] 查看成绩排序(学号) n");
printf("ttt [0] 退出 n");
printf("ttt n");
}
// 等待用户按回车后回到主菜单void to_menu(){
char c1,c2;
printf("nnn按回车键返回主菜单...");
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("总人数:%dn",dd.count);
printf("获得“优秀”的人数:%dn",A);
printf("获得“良”的人数:%dn",B);
printf("获得“中”的人数:%dn",C);
printf("获得“及格”的人数:%dn",D);
printf("不及格的人数:%dn",E);
}
// 查看所有学生信息void view_data(){
int i;
printf("学号t姓名t数学t英语t物理");
printf("n-------------------------------------------------------------------n");
for(i=0;
i<dd.count;
i++) printf("%st%st%-7.1ft%-7.1ft%-7.1fn",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("nn继续添加学生信息[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("nn没有找到该学生(学号-%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("nn删除学生(学号-%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("nn没有找到该学生(学号-%s)!",no);
}
else {
printf("n请输入学生数据:");
printf("n姓名");
printf("n--------------------------------------------------------------------n");
scanf("%s",name);
strcpy(dd.stu[k].name,name);
save_data();
printf("nn修改学生记录(学号-%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("nn学号t姓名t数学t英语t物理");
printf("n-----------------------------------------------------------------n");
k=i;
printf("%st%st%-7.1ft%-7.1ft%-7.1fn",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("nn没有找到该学生(学号-%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("nn学号t姓名t数学t英语t物理");
printf("n-----------------------------------------------------------------n");
k=i;
printf("%st%st%-7.1ft%-7.1ft%-7.1fn",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("nn没有找到该学生(姓名-%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("%dt%st%st%-7.1fn",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("%dt%st%st%-7.1fn",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("%dt%st%st%-7.1fn",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语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
- C语言职工管理系统设计
- C语言设计图书登记系统与停车场管理系统的实例分享
- C语言学生管理系统源码分享
- 使用C语言打造通讯录管理系统和教学安排系统的代码示例
- C语言数据结构之学生信息管理系统课程设计
- C语言实现简单学生管理系统
- 学生信息管理系统C语言版
- C语言利用结构体数组实现学生成绩管理系统
- C语言超市管理系统设计