📄
字号:
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define M 50 /*全班总共学生数目*/
#define N 5 /*科目数/
/*结构体定义开始*/
typedef struct
{char name[9]; /*学生姓名*/
char no[10]; /*学生号码*/
float score[N]; /*各科成绩*/
float aves; /*平均成绩*/
}MBTP;
/*结构体定义结束*/
/*系统菜单模块开始*/
void menu()
{int ch;
char menu_s[]={" 学籍管理系统 V1.0 程序设计:熊孝鹏 \n\r"
"_____________________________________________________________\n\r"
" \n\r"
" 1. 输入学生数据 \n\r"
" 2. 计算平均成绩 \n\r"
" 3. 统计及格情况 \n\r"
" 4. 排出学生名次 \n\r"
" 5. 打印学生成绩 \n\r"
" 6. 学生成绩存盘 \n\r"
" 7. 读入学生成绩 \n\r"
" 8. 退出系统 \n\r"
" 请选择菜单号(1-8):_____"};
clrscr();
puts(menu_s);
}
/*系统菜单模块结束*/
/*课目名调用模块开始*/
char *sj(int n)
{char *ps,t_sj[10];
ps=t_sj;
switch(n)
{case 0: ps="大学英语";break;
case 1: ps="高等数学";break;
case 2: ps="数字电路";break;
case 3: ps="C语言";break;
case 4: ps="Visual Foxpro";break;
default :ps="未知科目";
}
return ps;
}
/*课目名调用结束*/
/*输入数据开始*/
void getdata(MBTP *p,int *n)
{int i=0,j;
char t_str[20];
if(*n) i=*n;
for(;i<M;i++)
{ if (i>0)
{printf("是否还要继续增加(Y/N)?");
if (getch()!=121) break;}
clrscr();
printf("学生[%d]的姓名:",i+1);
gets(p[i].name);
printf("%s的学号:",p[i].name);
gets(p[i].no);
for(j=0;j<N;j++)
{
printf("%s:",sj(j));
gets(t_str);
p[i].score[j]=atoi(t_str);
}
}
*n=i;
clrscr();
printf("\n成绩录入完毕,按任意键返回!\n");
}
/*输入数据结束*/
/*求平均成绩开始*/
void averdata(MBTP *p,float *p1,int n)
{int i,j;
float s_num;
float t[N]={0};
if (!n)
printf("非法操作!没有任何数据,按任意键返回...\n");
else
{for(i=0;i<n;i++)
{ s_num=0.0;
for(j=0;j<N;j++)
{s_num+=p[i].score[j];
t[j]+=p[i].score[j];}
p[i].aves=s_num/N;
}
for(i=0;i<N;i++)
p1[i]=t[i]/n;
printf("执行完毕!,按任意键返回...\n");
}
}
/*求平均成绩结束*/
/*统计及格情况开始*/
void statdata(MBTP *p,int n)
{int i,a=0,b=0,c=0,d=0;
if(!n)
printf("非法操作!没有任数据,按任意键返回...\n");
else
{ for(i=0;i<n;i++)
{switch((int)(p[i].aves/10))
{case 10:
case 9:a++;break;
case 8:
case 7:b++;break;
case 6:c++;break;
default:d++;}
}
printf("共有%d条学生成绩:\n优秀:%d人\n良好:%d人\n及格:%d人\n不及格:%d人\n",n,a,b,c,d);
}
}
/*统计及格情况结束*/
/*排出学生名次开始*/
void posidata(MBTP *p,int n)
{int i,j,k;
MBTP temp;
if(!n)
printf("非法操作!没有任何数据,按任意键返回...\n");
else
{for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<n;j++)
if(p[j].aves>p[i].aves) k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
for(i=0;i<n;i++)
printf("%-8s %4.1f\n",p[i].name,p[i].aves);
}
}
/*排名结束*/
/*打印成绩单开始*/
void prndata(MBTP *p,float *p1,int n)
{
int i;
char temp[2]={0};
if(!n)
printf("非法操作!没有任何数据,按任意键返回...\n");
else
{
clrscr();
printf(" 02计用一班学生成绩单 \n");
printf("_____________________________________________________\n");
printf("\n");
printf("姓名 学号 英语 高数 数电 C语言 数据库 平均成绩\n");
for(i=0;i<n;i++)
printf("%-7s%-10s%-5.1f%-5.1f%-5.1f%-6.1f%-7.1f%-5.1f\n",p[i].name,p[i].no,p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[3],p[i].score[4],p[i].aves);
printf("_____________________________________________________\n");
printf("平均分:%-10s%-5.1f%-5.1f%-5.1f%-6.1f%-7.1f%-5s\n",temp,p1[0],p1[1],p1[2],p1[3],p1[4],temp);
}
}
/*打印成绩单结束*/
/* 学生成绩存盘 */
void savedata(MBTP *p,int n)
{
int i;
FILE *fp;
if (!n)
printf("非法操作!没有任何数据,按任意键返回...\n");
else
{if((fp=fopen("stu.dat","w"))==NULL)
{printf("错误!不能打开文件!\n");
exit(0);}
for(i=0;i<n;i++)
fprintf(fp,"%-7s %-10s %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f\n",p[i].name,p[i].no,p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[3],p[i].score[4],p[i].aves);
fclose(fp);
printf("存盘完毕!按任意键返回...");
}
}
/*读入学生数据*/
void readdata(MBTP *p,int *n)
{int i=0;
FILE *fp;
if((fp=fopen("stu.dat","r"))==NULL)
{printf("错误!不能打开数据文件!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %f %f",p[i].name,p[i].no,&p[i].score[0],&p[i].score[1],&p[i].score[2],&p[i].score[3],&p[i].score[4],&p[i].aves);
i++;
}
fclose(fp);
*n=i-1;
printf("己经成功读入数据!按任意键返回!");
}
main()
{ MBTP s_user[M]={0};
float s_aves[N]={0};
int ch,num=0;
do
{ menu();
do
{ch=getch()-48;}
while(!(ch>0&&ch<9));
switch(ch)
{case 1:getdata(s_user,&num);break;
case 2:averdata(s_user,s_aves,num);break;
case 3:statdata(s_user,num);break;
case 4:posidata(s_user,num);break;
case 5:prndata(s_user,s_aves,num);break;
case 6:savedata(s_user,num);break;
case 7:readdata(s_user,&num);break;
case 8:exit(0);break;
}
}
while(getch()!=EOF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -