QQ邮箱:927959929@qq.com
这是我上个学期做的成绩管理系统,管理系统需求量还是挺大的,下面是成管理系统的源代码,欢迎大家使用
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
void menu();
void input();
void add();
void del();
void display();
void find();
void sort();
void quit();
void save_total();
struct student
{
int stu_ID;
char name[20];
int c_language;
int English;
int circuit;
int total_score;
int average;
}stu[100];
int total=0;
void main()
{
char ch,c;
FILE* fp;
if((fp=fopen("ftotal.txt","r"))==NULL)
fp=fopen("ftotal.txt","w");
else
fscanf(fp,"%d",&total);
fclose(fp);
menu();
do
{
fflush(stdin);
if((ch=getchar())!='\n');
{
switch(ch)
{
case '1':input();break;
case '2':add();break;
case '3':del();break;
case '4':display();break;
case '5':find();break;
case '6':sort();break;
case '7':quit();break;
default:printf("\n输入错误!按任意键继续:\n");//???
}
c=getch();
system("cls");
menu();
}
}while(1);
}
void menu()
{
printf(" *********************************菜单******************\n\n");
printf(" 1. 输 入 成 绩\n\n");
printf(" 2. 添 加 成 绩\n\n");
printf(" 3. 删 除 成 绩\n\n");
printf(" 4. 查 看 成 绩\n\n");
printf(" 5. 查 找 成 绩\n\n");
printf(" 6. 排 序 查 看\n\n");
printf(" 7.统计各阶段人数、不及格及各占比例\n\n");
printf(" 8. 退 出\n\n");
printf(" *******************************************************\n\n");
printf(" 请输入数字选择菜单:");
}
void input()
{
char z,tem[20];
int num,i;
FILE* fp;
system("cls");
printf("选择此功能将覆盖掉以前保存的成绩,确认继续(y/n):");
fflush(stdin);
scanf("%c",&z);
if(z=='n')
printf("按任意键回到主菜单:");
else if(z=='y')
{
fp=fopen("学生信息.txt","w");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
system("cls");
printf("请输入您要写入的学生个数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请依次输入学号、姓名、C语言成绩、英语成绩、计算机电路成绩:\n");
fflush(stdin);
printf("学号:");
scanf("%d",&stu.stu_ID);fflush(stdin);
printf("姓名:");
gets(tem);
strcpy(stu.name,tem);
printf("C语言:");
scanf("%d",&stu.c_language);getchar();
printf("英语:");
scanf("%d",&stu.English);getchar();
printf("计算机电路:");
scanf("%d",&stu.circuit);
putchar('\n');
stu.total_score=stu.c_language+stu.English+stu.circuit;
stu.average=stu.total_score/3;
fprintf(fp,"%d\t%s\t%d\t%d\t",stu.stu_ID,stu.name,stu.c_language,stu.English);
fprintf(fp,"%d\t%d\t%d\n",stu.circuit,stu.total_score,stu.average);
}
fclose(fp);
total=num;
save_total(total);
printf("输入成功!按任意键回到主菜单:");
}
else
printf("输入错误!按任意键回到主菜单:");
}
void add()
{
char tem[20];
int num,i;
FILE* fp;
fp=fopen("学生信息.txt","a");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
system("cls");
printf("请输入您要添加的学生个数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请依次输入学号、姓名、C语言成绩、英语成绩、电路成绩:\n");
fflush(stdin);
printf("学号:");
scanf("%d",&stu.stu_ID);fflush(stdin);
printf("姓名:");
gets(tem);
strcpy(stu.name,tem);
printf("C语言:");
scanf("%d",&stu.c_language);getchar();
printf("英语:");
scanf("%d",&stu.English);getchar();
printf("电路:");
scanf("%d",&stu.circuit);
putchar('\n');
stu.total_score=stu.c_language+stu.English+stu.circuit;
stu.average=stu.total_score/3;
fprintf(fp,"%d\t%s\t%d\t%d\t",stu.stu_ID,stu.name,stu.c_language,stu.English);
fprintf(fp,"%d\t%d\t%d\n",stu.circuit,stu.total_score,stu.average);
}
fclose(fp);
total+=num;
save_total(total);
printf("添加成功!按任意键回到主菜单:");
}
void del()
{
int i,m,stu_ID,flag=0,num;
char name[20];
FILE* fp;
fp=fopen("学生信息.txt","r+");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fscanf(fp,"%d\t%s\t%d\t%d\t",&stu.stu_ID,stu.name,&stu.c_language,&stu.English);
fscanf(fp,"%d\t%d\t%d\n",&stu.circuit,&stu.total_score,&stu.average);
}
fclose(fp);
system("cls");
printf("您想以学号删除还是以姓名删除?\n");
printf("1、以学号\n2、以姓名\n");
printf("请输入数字选择:");
scanf("%d",&m);
switch(m)
{
case 1:
printf("请输入学号:");
scanf("%d",&stu_ID);
for(i=0;i<total;i++)
{
if(stu_ID==stu.stu_ID)
{
flag=1;
num=i;
break;
}
}
if(flag!=1)
{
printf("无此学号!");
}
else
{
if(num==(total-1))
total--;
else
{
for(i=num;i<(total-1);i++)
stu=stu[i+1];
total--;
}
}
save_total(total);
fp=fopen("学生信息.txt","w");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fprintf(fp,"%d\t%s\t%d\t%d\t",stu.stu_ID,stu.name,stu.c_language,stu.English);
fprintf(fp,"%d\t%d\t%d\n",stu.circuit,stu.total_score,stu.average);
}
fclose(fp);
printf("删除成功!按任意键回到主菜单:");
break;
case 2:
printf("请输入姓名:");
fflush(stdin);
gets(name);
for(i=0;i<total;i++)
{
if(strcmp(name,stu.name)==0)
{
flag=1;
num=i;
break;
}
}
if(flag!=1)
{
printf("查无此人!");
}
else
{
if(num==(total-1))
total--;
else
{
for(i=num;i<(total-1);i++)
stu=stu[i+1];
total--;
}
}
save_total(total);
save_total(total);
fp=fopen("学生信息.txt","w");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fprintf(fp,"%d\t%s\t%d\t%d\t",stu.stu_ID,stu.name,stu.c_language,stu.English);
fprintf(fp,"%d\t%d\t%d\n",stu.circuit,stu.total_score,stu.average);
}
fclose(fp);
printf("删除成功!按任意键回到主菜单:");
break;
default:
printf("输入错误!按任意键回到主菜单:");
}
}
void display()
{
int i,j;
FILE* fp;
fp=fopen("学生信息.txt","r");//!!!
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fscanf(fp,"%d\t%s\t%d\t%d\t",&stu.stu_ID,stu.name,&stu.c_language,&stu.English);
fscanf(fp,"%d\t%d\t%d\t%d\n",&stu.circuit,&stu.total_score,&stu.average);
}
fclose(fp);
system("cls");
printf("***********************************成绩单***************************************\n\n");
printf("学号 姓名 C语言 英语 电路 总分 平均分\n");
for(j=0;j<total;j++)
{
printf("%-10d%-15s%-10d%-10d",stu[j].stu_ID,stu[j].name,stu[j].c_language,stu[j].English);
printf("%-10d%-10d%-10d\n",stu[j].circuit,stu[j].total_score,stu[j].average);
}
printf("按任意键回到主菜单:");
}
void find()
{
int i,m,stu_ID,flag=0,num;
char name[20];
FILE* fp;
fp=fopen("学生信息.txt","r");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fscanf(fp,"%d\t%s\t%d\t%d\t",&stu.stu_ID,stu.name,&stu.c_language,&stu.English);
fscanf(fp,"%d\t%d\t%d\n",&stu.circuit,&stu.total_score,&stu.average);
}
fclose(fp);
system("cls");
printf("查找方式:\n1、按学号查找\n2、按姓名查找\n");
printf("请输入数字选择:");
scanf("%d",&m);
switch(m)
{
case 1:
printf("请输入学号:");
scanf("%d",&stu_ID);
for(i=0;i<total;i++)
{
if(stu_ID==stu.stu_ID)
{
flag=1;
num=i;
break;
}
}
if(flag!=1)
{
printf("无此学号!按任意键回到主菜单:");
}
else
{
printf("\n学号 姓名 C语言 英语 电路 总分 平均分\n");
printf("%-10d%-15s%-10d%-10d",stu.stu_ID,stu.name,stu.c_language,stu.English);
printf("%-10d%-10d%-10d\n",stu.circuit,stu.total_score,stu.average);
printf("查找成功!按任意键回到主菜单:");
}
break;
case 2:
printf("请输入姓名:");
fflush(stdin);
gets(name);
for(i=0;i<total;i++)
{
if(strcmp(name,stu.name)==0)
{
flag=1;
num=i;
break;
}
}
if(flag!=1)
{
printf("查无此人!按任意键回到主菜单:");
}
else
{
printf("\n学号 姓名 C语言 英语 电路 总分 平均分\n");
printf("%-10d%-15s%-10d%-10d",stu.stu_ID,stu.name,stu.c_language,stu.English);
printf("%-10d%-10d%-10d\n",stu.circuit,stu.total_score,stu.average);
printf("查找成功!按任意键回到主菜单:");
}
break;
default:
printf("输入错误!按任意键回到主菜单:");
}
fclose(fp);
}
void sort()
{
struct student stu1;
int i,j,k,temp[100];
char ch;
FILE* fp;
fp=fopen("学生信息.txt","r");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<total;i++)
{
fscanf(fp,"%d\t%s\t%d\t%d\t",&stu.stu_ID,stu.name,&stu.c_language,&stu.English);
fscanf(fp,"%d\t%d\t%d\n",&stu.circuit,&stu.total_score,&stu.average);
}
fclose(fp);
system("cls");
printf("以何方式排序?\n1、学号\n2、总分\n请输入数字选择:");
fflush(stdin);
scanf("%c",&ch);
switch(ch)
{
case '1':
system("cls");
printf("按学号排序如下:\n");
for(i=1;i<total;i++)
{
for(k=0;k<total-i;k++)
{
if(stu[k].stu_ID>stu[k+1].stu_ID)
{
stu1=stu[k];
stu[k]=stu[k+1];
stu[k+1]=stu1;
}
}
}
printf("\n学号 姓名 C语言 英语 电路 总分 平均分\n");
for(j=0;j<total;j++)
{
printf("%-10d%-15s%-10d%-10d",stu[j].stu_ID,stu[j].name,stu[j].c_language,stu[j].English);
printf("%-10d%-10d%-10d\n",stu[j].circuit,stu[j].total_score,stu[j].average);
}
printf("按任意键回到主菜单:");
break;
case '2':
system("cls");
printf("按总分排序如下:\n");
for(i=1;i<total;i++)
{
for(k=0;k<total-i;k++)
{
if(stu[k].total_score<stu[k+1].total_score)
{
stu1=stu[k];
stu[k]=stu[k+1];
stu[k+1]=stu1;
}
}
}
printf("\n学号 姓名 C语言 英语 电路 总分 平均分\n");
for(j=0;j<total;j++)
{
printf("%-10d%-15s%-10d%-10d",stu[j].stu_ID,stu[j].name,stu[j].c_language,stu[j].English);
printf("%-10d%-10d%-10d\n",stu[j].circuit,stu[j].total_score,stu[j].average);
}
printf("按任意键回到主菜单:");
break;
default:
printf("输入错误!按任意键回到主菜单:\n");
break;
}
}
void quit()
{
system("cls");
exit(0);
}
void save_total(int total)
{
FILE* fp;
fp=fopen("ftotal.txt","w");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
fprintf(fp,"%d",total);
fclose(fp);
}
|