📄 学生成绩管理.cpp
字号:
/**********************************************************************
*制作人: 朱威
*制作时间:2007年9月13日
*程序名称:学生成绩管理系统
*程序功能:能实现对学生成绩的录入,插入,删除,查找,浏览,排序,
* 合计,保存,读取等功能
***********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //学生最大人数控制
// 结构体定义学生的所有属性,包括学生证号,姓名,3门学科成绩,总成绩,平均成绩
struct student
{
int no;
char name[15];
int score1;
int score2;
int score3;
int sum;
double avr;
}s[N];
// 函数声明
void mune(); //主菜单函数
void input(); //录入函数
void insert(); //插入函数
void del(); //删除函数
void delNo(); //按学生证号删除
void delName(); //按姓名删除
void select(); //查找函数
void selectNo(); //按学生证号查找
void selectName(); //按姓名查找
void sort(); //冒泡排序函数
void display(); //制表格式函数
void total(); //分类合计函数
void save(); //保存函数
void load(); //读取函数
// 全局变量
int i,j; //循环变量
int count=0; //控制数组下标变量
// 主函数
void main ()
{
int in; //选择功能的变量
char ch='y'; //选择是否继续时的变量,(y / n)
do
{
mune();
scanf("%d",&in);
if(in<0 || in>9)
{
printf("\a输入有误,请在0~9之间选择!");
continue;
}
else if(in==0){
printf("确定要退出程序吗?(y / n) ");
scanf(" %c",&ch);
printf("\n");
if(ch=='Y' || ch=='y')
{
printf("谢谢您的使用,再见!");
break;
}
}
switch(in)
{
case 1: //录入
printf("\n----------------------------- 请输入学员信息 -----------------------------");
input();
break;
case 2: //插入
insert();
break;
case 3: //删除
if(count!=0)
{
del();
}
else
{
printf("\a没有数据!\n"); //(如果学生人数为0,弹出此消息)
}
break;
case 4: //查找
if(count!=0)
{
select();
}
else
{
printf("\a没有数据!\n");
}
break;
case 5: //制表
if(count!=0)
{
display();
}
else
{
printf("\a没有数据!\n");
}
break;
case 6: //排序
if(count!=0)
{
sort();
display();
}
else
{
printf("\a没有数据!\n");
}
break;
case 7: //合计
if(count!=0)
{
total();
}
else
{
printf("\a没有数据!\n");
}
break;
case 8: //保存
save();
break;
case 9: //读取
load();
break;
default :
break;
}
}while(1);
}
// 主菜单函数
void mune()
{
printf(" *****************************************\n");
printf(" | 学生成绩系统主菜单界面 |\n");
printf(" | |\n");
printf(" | 1.录入学生成绩 6.排序学生成绩 |\n");
printf(" | |\n");
printf(" | 2.插入学生成绩 7.合计学生成绩 |\n");
printf(" | |\n");
printf(" | 3.删除学生成绩 8.存储学生成绩 |\n");
printf(" | |\n");
printf(" | 4.查找学生成绩 9.读取学生成绩 |\n");
printf(" | |\n");
printf(" | 5.浏览学生成绩 0.安全退出系统 |\n");
printf(" | |\n");
printf(" |----------->学生成绩管理程序<----------|\n");
printf(" *****************************************\n");
printf(" 请在0~9之间选择 :");
}
// 录入函数
void input()
{
char ch;
for(i=count;i<N;i++)
{
printf("\n学生证号: ");
scanf("%d",&s[i].no);
printf("\n姓名: ");
scanf("%s",&s[i].name);
printf("\n微机原理(成绩): ");
scanf("%d",&s[i].score1);
if(s[i].score1>100 || s[i].score1<0){
printf("输入有误,请重新输入!\n");
printf("\n微机原理(成绩): ");
scanf("%d",&s[i].score1);
}
printf("离散数学(成绩): ");
scanf("%d",&s[i].score2);
if(s[i].score2>100 || s[i].score2<0){
printf("输入有误,请重新输入!\n");
printf("\n离散数学(成绩): ");
scanf("%d",&s[i].score2);
}
printf("数据结构(成绩): ");
scanf("%d",&s[i].score3);
if(s[i].score3>100 || s[i].score3<0){
printf("输入有误,请重新输入!\n");
printf("\n数据结构(成绩): ");
scanf("%d",&s[i].score3);
}
s[i].sum=s[i].score1+s[i].score2+s[i].score3;
s[i].avr=s[i].sum/3.0;
printf("\n总成绩:%d",s[i].sum);
printf("\n平均成绩:%lf",s[i].avr);
printf("\n\n");
count++;
printf("是否继续输入?(y / n) ");
scanf(" %c",&ch);
printf("\n");
if(ch!='Y' && ch!='y')
{
break;
}
}
}
// 插入函数
void insert()
{
printf("\n------------------------ 请输入要插入的学员信息 ------------------------");
struct student temp;
input();
for(i=0;i<count;i++)
{
if(s[i].avr<temp.avr)
break;
}
for(j=count;j>=i;j--)
{
s[j+1]=s[j];
}
s[i]=temp;
}
// 删除函数,含子菜单:按学生证号删除,按姓名删除
void del()
{
int in;
do
{
printf(" ************************\n");
printf(" | 1.按学生证号删除 |\n");
printf(" | |\n");
printf(" | 2.学生按姓名删除 |\n");
printf(" | |\n");
printf(" | 3.返回上一级菜单 |\n");
printf(" ************************\n");
printf(" 请在1~3之间选择: ");
scanf("%d",&in);
if(in<1 || in>3)
{
printf("\a输入有误,请重新输入!\n");
continue;
}
else
{
break;
}
}while(1);
switch(in)
{
case 1:
delNo();
break;
case 2:
delName();
break;
case 3:
break;
}
}
// 删除函数,按学生证号删除
void delNo()
{
printf("\n-------------------- 请输入要删除的学员的学生证号 ------------------------");
int dno;
char ch;
printf("\n输入: ");
scanf("%d",&dno);
for(i=0;i<count;i++)
{
if(dno==s[i].no){
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
printf("\n确定要删除吗?(Y / N)");
scanf(" %c",&ch);
printf("\n");
if(ch=='y' || ch=='Y'){
for(j=i;j<count-1;j++)
{
s[j]=s[j+1];
}
printf("删除成功\n");
count--;
break;
}
}
}
}
// 删除函数,按学生姓名删除
void delName()
{
printf("\n-------------------- 请输入要删除的学员的姓名 ------------------------");
char name[15];
char ch;
printf("\n输入: ");
scanf("%s",&name);
for(i=0;i<count;i++)
{
if((strcmp(name,s[i].name))==0){
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
printf("\n确定要删除吗?(Y / N)");
scanf(" %c",&ch);
printf("\n");
if(ch=='y' || ch=='Y'){
for(j=i;j<count-1;j++)
{
s[j]=s[j+1];
}
printf("删除成功\n");
count--;
break;
}
}
}
}
// 查找函数,含子程序:按学生证号查找,按姓名查找
void select()
{
int in;
do
{
printf(" ************************\n");
printf(" | 1.按学生证号查找 |\n");
printf(" | |\n");
printf(" | 2.按学生姓名查找 |\n");
printf(" | |\n");
printf(" | 3.返回上一级菜单 |\n");
printf(" ************************\n");
printf(" 请在1~3之间选择: ");
scanf("%d",&in);
if(in<1 || in>3)
{
printf("\a输入有误,请重新输入!\n");
continue;
}
else
{
break;
}
}while(1);
switch(in)
{
case 1:
selectNo();
break;
case 2:
selectName();
break;
case 3:
break;
}
}
// 查找函数,按学生证号查找学员信息
void selectNo()
{ printf("\n-------------------- 请输入要查找的学员的学生证号 --------------------");
int no;
printf("\n输入:");
scanf("%d",&no);
for(i=0;i<count;i++)
{
if(s[i].no==no)
{
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
printf("\n");
}
}
}
// 查找函数,按姓名查找学员信息
void selectName()
{
printf("\n-------------------- 请输入要查找的学员的姓名 --------------------");
char name[15];
printf("\n输入:");
scanf("%s",&name);
for(i=0;i<count;i++)
{
if((strcmp(name,s[i].name))==0)
{
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
printf("\n");
}
}
}
// 排序函数,按平均成绩从高到低排序
void sort()
{
struct student t;
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(s[j].avr<s[j+1].avr)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
}
// 制表函数,将所有学员成绩以表格形式输出
void display()
{
printf("------------------------------------------------------");
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
for(i=0;i<count;i++)
{
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
}
printf("------------------------------------------------------\n");
}
// 合计函数,将3门学科的个人成绩,总分,平均分输出
void total()
{
int tot1=0,tot2=0,tot3=0;
double avr1=0,avr2=0,avr3=0;
printf("\n\t\t微机原理\t离散数学\t数据结构\n\n");
for(i=0;i<count;i++){
tot1+=s[i].score1;
tot2+=s[i].score2;
tot3+=s[i].score3;
avr1=tot1/count;
avr2=tot2/count;
avr3=tot3/count;
printf("\t\t %d\t\t %d\t\t %d\n",s[i].score1,s[i].score2,s[i].score3);
}
printf("\n");
printf("合计:\t\t %d\t\t %d\t\t %d\n",tot1,tot2,tot3);
printf("平均分:\t\t %.01f\t\t %.01f\t\t %.01f\n",avr1,avr2,avr3);
printf("\n");
}
// 保存函数,将数据保存到student.txt文件下
void save()
{
FILE *fp;
fp=fopen("student.txt","a+");
if(fwrite(&s[i],sizeof(struct student),1,fp)!=1){
printf("文件保存失败!\n");
}
else{
fwrite(&s[i],sizeof(struct student),count,fp);
printf("数据成功保存到程序下的student.txt文件中!\n");
}
fclose(fp);
}
// 读取函数,提取student.txt文件中的数据
void load()
{
FILE *fp;
int counter=0;
char ch;
struct student stu[N];
fp=fopen("student.txt","r+");
if(fp==NULL)
{
printf("\a文件打开失败!\n");
}
else
{
i=0;
while(!feof(fp))
{
fread(&stu[i],sizeof(struct student),1,fp);
i++;
counter++;
}
counter--; //在读取循环过程中counter多加了一次,所以在循环结束后自身减1
// 读取完毕后打印出来
for(i=0;i<counter;i++)
{
printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",stu[i].no,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].avr);
}
printf("是否提取到当前数据中 (Y / N)");
scanf(" %c",&ch);
printf("\n");
if(ch=='Y' || ch=='y')
{
for(i=count;i<counter;i++)
{
s[count]=stu[i];
count++;
}
printf("提取成功!\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -