学生成绩管理系统(简单的)教学提纲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct{
int num; //学号
char name[20]; //姓名
char sex[10];
int age;
double maths; //数学成绩
double english; //英语成绩
double chinese; //语文成绩
double computer; //计算机成绩
double total; //总成绩
double average; //平均成绩
} STUDENT; //定义结构体
#define N 100
int menu(){
char a;
do{ system("cls"); //运行前清零printf("\t\t 学生成绩管理系统\n");
printf("\t\t | 1. 输入记录\n");
printf("\t\t | 2. 插入\n");
printf("\t\t | 3. 按学号排序\n");
printf("\t\t | 4. 按成绩排序\n");
printf("\t\t | 5. 查询信息\n");
printf("\t\t | 6. 删除某人信息\n");
printf("\t\t | 7. 浏览结果\n");
printf("\t\t | 0. 退出\n");
printf("\t\t**********************************\n");
printf("\t\t\t给出你的选择(0-7):");
a=getchar();
}while(a<'0'||a>'7');
return(a-'0');
}
void input(STUDENT *s, int size){ //输入函数int i;
FILE*fp;
if((fp=fopen("stu.dat","wb"))==NULL){
printf("Cannot open file!");
exit(0);
}
for(i=0;i<size;i++){
printf("输入学号:\n");
scanf("%d",&s[i].num);
printf("输入姓名:\n");
scanf("%s",s[i].name);
printf("输入性别:\n");
scanf("%s",s[i].sex);
printf("输入年龄:\n");
scanf("%d",&s[i].age);
printf("输入数学成绩:\n");
scanf("%lf",&s[i].maths);
printf("输入英语成绩:\n");
scanf("%lf",&s[i].english);
printf("输入语文成绩:\n");
scanf("%lf",&s[i].chinese);
printf("输入计算机成绩:\n");
scanf("%lf",&s[i].computer);
s[i].total=s[i].maths+s[i].chinese+s[i].english+s[i].computer;
s[i].average=s[i].total/4.0;
fwrite(&s[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
void output(STUDENT *s){
//输出函数
int i;
FILE*fp;
if((fp=fopen("stu.dat","rb"))==NULL){
printf("Cannot open file!");
exit(0);
}
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);
}
}
void save() { /*保存到磁盘上*/
FILE *fp;
STUDENT*s;
fp=fopen("stu.dat","wb");
int i;
for (i=0;i<N;i++) {
fwrite(&s[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
void read(STUDENT *s,int size) { /*从磁盘内读取*/
FILE *fp;
fp=fopen("stu.dat","rb");
int i;
for (i=0;i<N;i++) {
fread(&s[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
void find(STUDENT *s,int size){ //按姓名查找
int i,flag=0;
char c[20];
FILE *fp;
fp=fopen("stu.dat","rb");
printf("输入要查询学生的姓名为:\n");
scanf("%s",c);
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
for (i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++)
if(strcmp(s[i].name,c)==0){
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);flag=1;
}
if(flag==0)printf("输入有误!");
fclose(fp);
}
void sort_by_num(STUDENT *s,int size){ //按学号排序
int i,j,n=0;
STUDENT t;
FILE *fp;
fp=fopen("stu.dat","rb");
for (i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
n++;}
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++){
if (s[i].num>s[j].num) {
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
for(i=0;i<n;i++){
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);}
fp=fopen("stu.dat","wb");
for(i=0;i<n;i++){
fwrite(&s[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
void sort_by_total(STUDENT *s,int size){ //按总分排序函数
int i,j,n=0;
STUDENT t;
FILE *fp;
fp=fopen("stu.dat","rb");
for (i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
n++;
}
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++){
if (s[i].total<s[j].total) {
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
for(i=0;i<n;i++){
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);}
fp=fopen("stu.dat","wb");
for(i=0;i<n;i++){
fwrite(&s[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
void del(STUDENT *s,int size){ //按学号删除函数int i,n;
int num;
int flag=0;
int total=0,m=0;
FILE *fp;
fp=fopen("stu.dat","rb");
printf("请输入要删除的学生学号:\n");
scanf("%d",&num);
for (i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
total++;
}
for(i=0;i<total;i++)
if(num==s[i].num){flag=1;
printf("\t\t要删除学生的信息");
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);
for(i=i;i<total;i++){
s[i]=s[i+1];}
if((fp=fopen("stu.dat","wb"))==NULL){
printf("Cannot open file!");
exit(0);
}
for(i=0;i<total-1;i++){
fwrite(&s[i],sizeof(STUDENT),1,fp);}}
fclose(fp);
printf("\t\t删除后的情况\n");
printf("学号姓名数学英语语文计算机总分平均\n");
fp=fopen("stu.dat","rb");
for (i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
m++; }
for(i=0;i<m;i++){
printf("%-12d",s[i].num);
printf("%-11s",s[i].name);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);
}
if(flag==0){
printf("*******************************************");
printf("输入错误!\n");
printf("请返回!\n");
printf("*******************************************");}
printf("\n\n\n");
fclose(fp);
}
void insert(STUDENT *s,int size) //按学号插入
{
int i,n=0;
int total=0;
FILE *fp;
fp=fopen("stu.dat","ab");
rewind(fp);
for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){
printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
printf(" %-7d%-6s%-6s%-4s%7.1f%7.1f%7.1f%7.1f%7.1f%7.1f\n",s[i].num,s[i].sex,s[i].age, s[i].maths,s[i].english,s[i].chinese,s[i].computer,s[i].total,s[i].average);
}
total=i;
printf("请输入要插入学生的学号: \n");
scanf("%d",&s[size].num);
printf("输入姓名:\n");
scanf("%s",s[size].name);
printf("输入性别:\n");
scanf("%s",s[size].sex);
printf("输入年龄:\n");
scanf("%d",&s[size].age);
printf("输入数学成绩:\n");
scanf("%lf",&s[size].maths);
printf("输入英语成绩:\n");
scanf("%lf",&s[size].english);
printf("输入语文成绩:\n");
scanf("%lf",&s[size].chinese);
printf("输入计算机成绩:\n");
scanf("%lf",&s[size].computer);
s[size].total=s[size].maths+s[size].chinese+s[size].english+s[size].computer;
s[size].average=s[size].total/4.0;
fwrite(&s[size],sizeof(STUDENT),1,fp);
fclose(fp);
//while(!feof(fp))
// if(fread(&s[n],sizeof(STUDENT),1,fp))
// n++;
/* printf("学号姓名性别年龄数学英语语文计算机总分平均\n");
for(i=0;i<size+1;i++){
printf(" %-7d",s[i].num);
printf("%-6s",s[i].name);
printf("%-6s",s[i].sex);
printf("%-4d",s[i].age);
printf("%7.1f ",s[i].maths);
printf("%7.1f ",s[i].english);
printf("%7.1f ",s[i].chinese);
printf("%7.1f ",s[i].computer);
printf("%7.1f ",s[i].total);
printf("%7.1f\n",s[i].average);
}*/
}
void main(){ //主函数
STUDENT std[N]; //定义结构体数组
int m;
while(1){ //循环保证多次应用
switch(menu()){ //运用菜单函数
case 1:
printf("请输入你要登记的人数:\n");
scanf("%d",&m);
input(std,m);system("pause");break;
case 2:insert(std,N);system("pause");break;
case 3:
sort_by_num(std,N);
// output(std);
system("pause");break;
case 4:
sort_by_total(std,N);
// output(std);
system("pause");break;
case 5:find(std,N);system("pause");break;
case 6:del(std,N);system("pause");break;
case 7:output(std);
system("pause");break;
case 0:{printf("谢谢使用!\n");}exit(0);
default: printf("输入有误,重新输入!\n");
}
}
}。

相关文档
最新文档