大
中
小
C语言(学员管理系统)
2014-10-10
/**************************************************************************
北大青鸟学员管理系统。。
此程序可实现以管理员方式操作学员的学号,姓名,三门成绩,以及平均成绩的录入,
读取,删除,排序,查找,保存功能。并提供普通帐户对学员信息的浏览。
***************************************************************************/
#include
#include
#include
int count=0,flag; //定义两个全局变量,count为总录入人数。flag为一个标记
char ch; //定义一个全局字符变量,为程序经常执行“是否继续”输入
struct student //声明一个结构体,并作为全局变量。
{
char num[5]; //学号
char name[30]; //姓名
float score[3]; //三门课程成绩
float pinjun; //平均成绩
}stu[50]; //声明结构数组可存放50名学生
void denglu(); //选择登录函数
void administrator(); //管理员界面
void guess(); //普通帐户界面
void input(); //录入函数
void charu(); //插入函数
void xiugai(); //修改函数
void del(); //删除函数
void output(); //显示函数
void jiang(); //降序排列函数
void sheng(); //升序排列函数
void find(); //查找函数
void exit1(); //退出函数
void jilu(); //读取上次记录
void read_count(); //读取总人数值
void save_count(); //保存总人数值
void read(); //读取学员信息
void save(); //保存学员信息
void main() //主函数
{
denglu(); //主函数中调用登录函数
}
void denglu() //登录函数
{
char admin[30],pass[20]; //字符数组分别用于存放用户名,密码
char pass1[20]="123456"; //字符串用于存放默认密码
int i,j; //统计数组下标
/***********************************登录前界面***********************************************/
printf("\n\n\n\n\t\t\t★★★★★★★★★★★★★★★");
printf("\n\n\t\t\t★ 学 员 管 理 系 统 ★\n\n\t\t\t★★★★★★★★★★★★★★★\t\t\t\t\n\n\n");
printf("\t﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉\n");
getch();
do{
printf("\n\n\t\t\t1:管理员帐户\n\t\t\t2:普通帐户\n\t\t\t0:退出程序\n\n\t\t\t");
printf("\n\t\t\t请选择登录类型:");
fflush(stdin);
ch = getchar();
switch(ch) //分支实现用户输入的功能
{
case '1': //选择管理员登录
printf("\n\t\t\t请输入用户名:");
fflush(stdin);
gets(admin);
fflush(stdin);
printf("\n\t\t\t请输入密码:");
i=0;
/*以下用于输入密码,从键盘得到一个符并赋给字符数组。同时打印一个*号。直到遇\n结束。*/
do{
fflush(stdin);
ch=getch();
pass=ch;
if(ch!=13)
{
printf("*");
}
i++;
}while(ch!=13);
/* 以下用于判断密码是否为管理员密码,将用户输入密码串与系统内设密码相比,
相等则继续,否则跳出 ,同时返回一个j的值 */
for(j=0;j<6;j++)
{
if(pass[j]==pass1[j])
continue;
else
break;
}
if((j==6)&&(strcmp(admin,"admin")==0)&&(i==7)) //判断用户名,密码是否为管理员。
{
printf("\n\t\t\t登录中请稍等");
for(i=0;i<6;i++)
{
Sleep(500);
printf(".");
}
system("cls"); //系统清屏
printf("\n登录成功,当前是管理员账户."); //成功登录
administrator(); //调用管理员界面函数
}
if((strcmp(pass,pass1)!=0)||(strcmp(admin,"admin")!=0)) //用户名,密码错误,则跳出重新选择
{
printf("\n\t\t\t用户名或密码错误,请重新选择");
break;
}
case '2': //分支实现用户输入的功能:游客
printf("\n\t\t\t将以普通帐户登录");
for(i=0;i<6;i++) //循环控制输出系统等待时间
{
Sleep(500);
printf(".");
}
system("cls"); //清屏
printf("\n登录成功,当前是普通帐户.");
guess(); //调用普通帐户界面函数
case '0': //分支实现用户输入的功能:退出
/******************************退出时显示界面***********************************************/
system("cls");
printf("\n\n\n\n******************************************************************************\n");
printf("\n\t\t\t关于学员成绩管理系统\n");
Sleep(800);
printf("\n\t\t\t作者 赛思特组\n");
Sleep(800);
printf("\n\t\t\t组员:汪波 王勃 张小惠 李承檬 田庆康\n");
Sleep(800);
printf("\n\t\t\t特别鸣谢:北大青鸟清河中心\n");
Sleep(800);
printf("\n\t\t\t北大青鸟TS111班 2008-5-19\n");
Sleep(800);
printf("\n\t\t\tCopyright(C)2008\n");
Sleep(800);
printf("\n******************************************************************************\n\n\n\n\n\n\n");
printf("正在退出请稍候");
for(i=0;i<6;i++) //循环控制退出等待时间
{
Sleep(500);
printf(".");
};
system("cls"); //清屏
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t成功退出!\n\n\t\t\t\t谢谢使用!\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
exit(0); //终止程序
default: //若用户输入错误。则跳出继续循环。
{
printf("\n\t\t\t输入错误!");
continue;
}
}
}while(ch!='1'||ch!='2'); //判断用户输入不为1或者2时执行循环
}
void administrator() //管理员函数
{
char sel; //字符变量,控制选择降序或者升序
int i;
jilu(); //调用函数,询问用户是否读取上次操作记录。
do{
/************************管理员主界面*******************************/
printf("\n\n\t\t\t〖\t学 员 管 理 系 统\t〗\t\n");
printf("\n\t\t≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n"); //提示信息
printf("\n\t\t︴\t\t1: 录入新学员信息\t\t︴");
printf("\n\n\t\t︴\t\t2: 插入新学员信息\t\t︴");
printf("\n\n\t\t︴\t\t3: 修改学员信息 \t\t︴");
printf("\n\n\t\t︴\t\t4: 删除学员信息 \t\t︴");
printf("\n\n\t\t︴\t\t5: 查看学员信息 \t\t︴");
printf("\n\n\t\t︴\t\t6: 顺序排列学员 \t\t︴");
printf("\n\n\t\t︴\t\t7: 查找学员 \t\t︴");
printf("\n\n\t\t︴\t\t8: 保存所有信息 \t\t︴");
printf("\n\n\t\t︴\t\t0: 退出 \t\t︴\n");
printf("\n\t\t≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");
printf("\n请选择您要进行的操作(0-8): "); //操作选择
fflush(stdin);
ch = getchar();
switch(ch) //分支实现各项功能
{
case '1': system("cls");input();system("cls");continue; //调用记录函数 并清屏
case '2': system("cls");charu();system("cls");continue; //调用插入函数 并清屏
case '3': system("cls");xiugai();system("cls");continue; //调用修改函数 并清屏
case '4': system("cls");del();system("cls");continue; //调用删除函数 并清屏
case '5':
system("cls");
output(); //调用显示函数 并清屏
system("cls");
continue;
case '6':
system("cls");
printf("\n程序将按成绩排序:\n\na:降序\t\tb:升序\n\n请选择:");
fflush(stdin);
sel = getchar();
if(sel=='a'||sel=='A') //选择成绩降序,则调用降序函数
{
jiang();
output();
}
else if(sel=='b'||sel=='B') //选择成绩升序,则调用降序函数
{
sheng();
output();
}
system("cls");
continue;
case '7': system("cls");find();system("cls");continue; //调用查找函数
case '8':
system("cls");
printf("\n正在保存,请稍候!");
for(i=0;i<6;i++) //循环控制输出系统等待。。。。。。
{
Sleep(500);
printf(".");
}
save(); //调用保存函数
printf("\n保存成功。\n");
printf("\n任意键继续!");
fflush(stdin);
ch = getch();
continue;
case '0':
printf("是否保存当前更改?(y/n)");
fflush(stdin);
ch = getchar();
if(ch=='y'||ch=='Y')
{
printf("\n正在保存,请稍候!");
for(i=0;i<6;i++) //循环控制输出系统等待。。。。。。
{
Sleep(500);
printf(".");
}
save();
printf("\n保存成功。\n");
exit1();
system("cls");
}
else{
exit1();
system("cls");
}
continue; //退出函数
default:
{
printf("\n输入错误!请重新输入\n"); //提示选择错误的信息
flag=1; //使标记值为真并跳出switch 执行下次循环
break;
}
}
}while(1);
}
void guess() //普通帐户函数
{
int flag=1; //定义检查标记
char sel; //字符变量,控制选择降序或者升序
printf("\n\n\n\n\t\t\t〖\t学 员 管 理 系 统\t〗\t\n");
do{
/*****************************普通帐户主界面**********************************/
printf("\n\n\t\t≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n"); //提示信息
printf("\n\t\t︴\t\t1: 查看学员信息 \t\t︴");
printf("\n\n\t\t︴\t\t2: 顺序排列学员 \t\t︴");
printf("\n\n\t\t︴\t\t3: 查找学员 \t\t︴");
printf("\n\n\t\t︴\t\t0: 退出 \t\t︴\n");
printf("\n\t\t≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");
printf("\n\n\n请选择您要进行的操作(0-3): "); //操作选择
fflush(stdin);
ch = getchar();
printf("\n--------------------------------------\n");
switch(ch) //分支实现用户输入各项功能
{
case '1': system("cls");output();system("cls");continue; //调用显示函数
case '2': //实现排序
system("cls");
{
printf("\n程序将按成绩排序:\n\na:降序\t\tb:升序\n\n请选择:");
fflush(stdin);
sel = getchar();
if(sel=='a') //选a则实现降序
{
jiang();
output(); //调用降序函数后调用显示函数
}
else if(sel=='b') //选b则实现升序
{
sheng();
output(); //调用降序函数后调用显示函数
}
system("cls");
continue;
}
case '3': system("cls");find();system("cls");continue; //调用查找函数
case '0': exit1();system("cls");continue; //退出
default:
{
printf("\n输入错误!请重新输入\n"); //提示选择错误的信息
flag=1; //使标记值为真并跳出switch
system("cls");
continue;
}
}
}while(flag=1);
}
void input() //录入函数
{
int i=0,j; //i控制结构数组元素,j 为标记
float s=0;
printf("\n请输入学员信息:\n");
do{
float s=0; //初始化总成绩为0
do{
printf("请输入学号:");
fflush(stdin);
gets(stu[count].num); //接收用户输入学号
for(i=0;i
{
if(strcmp(stu.num,stu[count].num)==0) //判断用户输入学号是否已经存在结构数组中
{
printf("\n学号已存在,请重新输入!\n");
j=1; //标记为1
break; //存在则跳出内循环。
}
else
j=0; //否则标记为0
}
}while(j==1); //判断标记为1时执行循环
printf("请输入姓名:");
fflush(stdin); //接收输入姓名
gets(stu[count].name);
for(j=0;j<3;j++) //循环接收三门课程成绩并累加和
{
fflush(stdin);
printf("请输入第%d门成绩:",j+1);
scanf("%f",&stu[count].score[j]);
s=s+stu[count].score[j];
}
stu[count].pinjun = s/3; //求平均成绩
count++;
printf("是否继续录入?(y/n)");
fflush(stdin);
ch = getchar();
}while(ch=='y'||ch=='Y'); //循环是否继续
save(); //执行录入完后保存
}
void charu() //插入函数
{
int i=0,j; //i,j控制下标
float s=0; //s存放累加和并初始化为0
printf("\n插入前学员信息:\n"); //显示插入前信息
output(); //调用显示函数
printf("\n请插入学员信息:\n"); //执行插入
do{
float s=0;
do{
printf("请输入学号:");
fflush(stdin);
gets(stu[count].num);
for(i=0;i
{
if(strcmp(stu.num,stu[count].num)==0) //判断学号是否已经存在,如存在,则跳出执行下次循环。
{
printf("\n学号已存在,请重新输入!\n");
flag=1; //标记为1
break;
}
else
flag=0; //否则标记为0
}
}while(flag==1); //标记为1时继续循环
printf("请输入姓名:");
fflush(stdin);
gets(stu[count].name);
for(j=0;j<3;j++) //循环控制三门成绩输入
{
fflush(stdin);
printf("请输入第%d门成绩:",j+1);
scanf("%f",&stu[count].score[j]);
s+=stu[count].score[j]; //累加和
}
stu[count].pinjun = s/3; //求平均值
count++; //每插入一名学员,人数加1
printf("是否继续插入?(y/n)");
fflush(stdin);
ch = getchar();
}while(ch=='y'||ch=='Y'); //判断是否继续
printf("\n插入后学员信息:\n"); //显示插入后学员信息 --调用降序函数--调用显示函数
jiang();
output(); //插入后显示
save(); //保存
}
void xiugai() //修改函数
{
char xiu[5]; //定义一个字符串,用于查找结构体学号成员
int i,j;
float s = 0; //总成绩S
do{
printf("\n请输入要修改的学员学号:");
fflush(stdin);
gets(xiu);
for(i=0;i<=count;i++) //循环用于查找学号
{
if(strcmp(xiu,stu.num)==0) //如果用户输入学号在结构体中查到。则执行
{ //此时下标i正好指向要修改的元素
printf("\n 请选择要修改的部分\n"); //选择修改内容。
printf("\n 1: 学号");
printf("\n 2: 姓名");
printf("\n 3: 成绩");
printf("\n请选择: ");
fflush(stdin);
ch=getchar();
switch(ch) //分支用于选择
{
case '1':
do{
printf("\n请输入新的学号: "); //修改学号
fflush(stdin);
gets(stu.num);
for(j=0;j
{
if((ji)&&(strcmp(stu[j].num,stu.num)==0)) //判断学号是否已经存在,如存在,则跳出执行下次循环。
{
printf("\n学号已存在,请重新输入!\n");
flag=1; //标记为1
break;
}
else
flag=0; //否则标记为0
}
}while(flag==1);
break;
case '2': //修改姓名
printf("\n请输入新的姓名: ");
fflush(stdin);
gets(stu.name);
break;
case '3': //修改成绩并重新计算平均值
for(j=0,s=0;j<3;j++)
{
fflush(stdin);
printf("请输入第%d门成绩:",j+1);
scanf("%f",&stu.score[j]);
s+=stu.score[j];
}
stu.pinjun = s/3;
break;
default:
printf("\n没有此项操作!\n");
flag=1; //标记
}
if(flag!=1) //如果有操作,,则提示修改成功
{
printf("\n 修改成功!该学员修改后的信息如下\n");
printf("学号\t姓名\tc成绩\tj成绩\ts成绩\t平均成绩\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.pinjun);
break;
}
}
if(strcmp(xiu,stu.num)!=0) //如果未找到学号,则继续执行循环
{
continue;
}
}
if(i>count) //如果下标越界,则未找。
{
printf("没找到此学号\n");
}
printf("是否继续修改?(y/n)");
fflush(stdin);
ch = getchar();
}while(ch=='Y'||ch=='y'); //循环是否继续
save(); //保存
}
void del() //删除函数
{
char dell[5]; //定义字符串,用于查找学号
int i; //i为下标
struct student temp; //声明一个结构体。用于作容器
do{
printf("\n请输入要删除的学员学号:");
fflush(stdin);
gets(dell);
for(i=0;i<=count;i++) //循环查找学员学号,找着则退出循环
{
if(strcmp(dell,stu.num)==0)
{
break;
}
}
if(i>count) //如果下标越界,则说明未找以。
{
printf("\n找不到这个学员!\n");
}
if(i<=count) //提示找到, ,询问是否删除
{
printf("\n是否要删除%s号学员的信息(Y/N):",stu.num);
fflush(stdin);
ch = getchar();
if(ch=='Y'||ch=='y')
{
for(;i
{
temp = stu; //删除某个学员,并把后面元素前移一位。
stu= stu;
stu= temp;
}
count--; //总人数-1
printf("删除成功\n");
}
}
printf("是否继续删除?(y/n)");
fflush(stdin);
ch = getchar();
}while(ch=='Y'||ch=='y'); //判断是否继续
save(); //保存
}
void output() //显示函数
{
int i; //定义I为下标
if(count>0) //如果 有录入记录,则显示相关信息
{
printf("\n\t\t\t学员信息:\n\n");
printf("学号\t姓名\tc成绩\tj成绩\ts成绩\t平均成绩\n");
for(i=0;i
{
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.pinjun);
}
}
else //否则说明文件无记录
{
printf("\n文件中无任何信息!\n");
}
printf("\n任意键退出查看!");
fflush(stdin);
ch = getch();
}
void jiang() //降序函数
{
int i,j; //i控制大循环。j控制小循环
struct student temp; //定义一个结构体容器
for(i=0;i
{
for(j=0;j
{
if(stu[j].pinjun
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
void sheng() //升序函数
{
int i,j; //i控制大循环。j控制小循环
struct student temp; //定义一个结构体容器
for(i=0;i
{
for(j=0;j
{
if(stu[j].pinjun>stu[j+1].pinjun) //如果第一个元素大于第二个,则交换位置,然后下标后移一位
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
void find() //查找函数
{
char s[5]; //定义一个数组,用于查找学号
int i;
printf("\n请输入要查找的学员学号:");
fflush(stdin);
gets(s);
for(i=0;i
{
if(strcmp(s,stu.num)==0) //如果学号一样,则显示输出。
{
printf("该学员信息如下:\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.pinjun);
break;
}
}
if(i>=count) //如果下标越界未找着相同的,则显示没找到。
{
printf("没找到该学号\n");
}
printf("\n\n按任意键返回\n");
fflush(stdin);
ch = getch(); //控制画面停顿
}
void exit1() //退出函数
{
int i; //i 为计数器
printf("\n\n正在退出,请稍等");
for(i=0;i<6;i++) //循环控制输出系统等待。。。。。。
{
Sleep(500);
printf(".");
}
system("cls"); //清屏
printf("\n\t\t\t\t\t成功退出");
denglu(); //返回登录界面
}
void read_count() //读取总人数值
{
FILE *reade_Count;
if((reade_Count=fopen("count.txt","r"))!=NULL)
{
fscanf(reade_Count,"%d",&count);
}
fclose(reade_Count);
}
void save_count() //保存总人数值
{
FILE *write_count;
write_count = fopen("count.txt","w");
fprintf(write_count,"%d",count);
fclose(write_count);
}
void read() //读取学员信息
{
struct student stu1;
FILE *fp;
int i;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("文件中无记录,按任意键新建\n");
fflush(stdin);
ch=getch();
}
else
{
printf("\n读取成功,正在进入");
for(i=0;i<6;i++) //循环控制输出系统等待。。。。。。
{
Sleep(500);
printf(".");
}
read_count();
for(i=0;i
{
fscanf(fp,"%s%s%f%f%f%f",stu.num,stu.name,&stu.score[0],&stu.score[1],&stu.score[2],&stu.pinjun);
}
fclose(fp);
}
}
void save() //保存学员信息
{
FILE *fp; /*FILE4个字母都要大写*/
int i;
fp=fopen("student.txt","w");
for(i=0;i<50;i++)
{
fprintf(fp,"%s %s %f %f %f %f ",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.pinjun);
}
fclose(fp);
save_count();
}
void jilu()
{
int i;
FILE *fp;
if((fp=fopen("student.txt","r"))!=NULL)
{
printf("\n\n是否读取上次记录?(y/n)");
fflush(stdin);
ch = getchar();
if(ch=='Y'||ch=='y')
{
printf("\n读取中,请稍候");
for(i=0;i<6;i++) //循环控制输出系统等待。。。。。。
{
Sleep(500);
printf(".");
}
read();
}
}
else
{
return;
}
}
赞赏
共11人赞赏
本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。