学生成绩管理系统列子!
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define M 100
struct user
{
char name[30];
char password[20];
}us[M];
struct student
{
char xuehao[10];//学号
char name[30];//姓名
char sex;//性别
int scores[3];//三门课程的成绩
}stu[M];
int count;//已录入的学生人数
int n;//已注册的用户数
int num[100];
void menu();
void zhuce();
void save();
void read();
void denglu();
void delay(int s);//延时函数
void zhujiemian();
void init();//系统加载函数
void luru();//学生成绩录入
void xianshi();//学生成绩显示
void chaxun();//查询
void saveFile();//保存学生信息
void readRecords();//读取学生成绩信息
void main()
{
init();
read();//读取用户信息
readRecords();//读取文件中的学生记录
menu();
}
void delay(int s)
{
int i;
for(i=1;i<=s*10000000;i++)
{
}
}
void init()
{
int i,j;
for(j=1;j<=3;j++)
{
system("cls");
printf("\n\n\n\n\t\t\t系统加载中\n");
printf("\t\t\t请稍后");
for(i=1;i<=6;i++)
{
printf(".");
delay(10);
}
}
}
void menu()
{
char ch,ch2;
while(1)
{
system("cls");
printf("\n\n\n\n\n\n");
printf("\t\t\t§§§§§§§§§§§§§§§§§§§§§\n");//◆◇◇◆◆◇◇◆◆◇◇◆◆◇◇◆◆◇◇◆\n");
printf("\t\t\t§§ §§\n");
printf("\t\t\t§§1→用户注册 2→用户登录 §§\n");
printf("\t\t\t§§ 3→退出 §§\n");
printf("\t\t\t§§ §§\n");
printf("\t\t\t§§§§§§§§§§§§§§§§§§§§§\n");//◆◇◇◆◆◇◇◆◆◇◇◆◆◇◇◆◆◇◇◆\n");
printf("\n\t\t\t请选择操作:");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1':
zhuce();
break;
case '2':
system("cls");
denglu();
break;
case '3':
printf("是否真的退出系统?(按y退出):");
fflush(stdin);
ch2=getchar();
if(ch2=='y'||ch2=='Y')
exit(0);
else
break;
default:
printf("\t\t\t输入错误!请重新输入!\n");
printf("\t\t\t按任意键继续!\n\t\t\t");
fflush(stdin);
getchar();
break;
}
}
}
void denglu()
{
char inname[30],inpwd[20];
int i,j;
printf("-----------------用户登录-------------------\n");
printf("用户名:");
fflush(stdin);
gets(inname);
printf("密码:");
j=0;
while((inpwd[j]=getch())!='\r')
{
if(j==0&&inpwd[j]=='\b')
{
}
else if(inpwd[j]=='\b')
{
printf("\b");
printf(" ");
printf("\b");
j--;
}
else
{
printf("*");
j++;
}
}
inpwd[j]='\0';
for(i=0;i<n;i++)
{
if(strcmp(inname,us[i].name)==0&&strcmp(inpwd,us[i].password)==0)
{
printf("\n登录成功!\n");
printf("3秒之后进入系统界面...");
delay(80);
zhujiemian();
break;
}
}
if(i==n)
{
printf("\n登录失败!\n");
fflush(stdin);
printf("按任意键继续!");
getchar();
}
}
void zhujiemian()
{
char ch;
while(1)
{
system("cls");
printf("****************欢迎进入学生成绩管理系统***********\n");
printf("************************************\n");
printf("** 1)学生成绩录入 **\n");
printf("** 2)学生成绩查询 **\n");
printf("** 3)学生成绩修改 **\n");
printf("** 4)学生成绩删除 **\n");
printf("** 5)学生成绩显示 **\n");
printf("** 0)返回 **\n");
printf("************************************\n");
printf("请选择操作:");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1':
luru();
break;
case '2':
chaxun();
break;
case '3':
//xiugai();
break;
case '4':
//shanchu();
break;
case '5':
xianshi();
break;
case '0':
menu();
break;
}
}
}
int findNo(char chNo[10])
{
int i;
for(i=0;i<count;i++)
{
if(strcmp(stu[i].xuehao,chNo)==0)
{
printf("学号\t姓名\t性别\tC语言\tInternet\t计算机结构\n");
printf("%s\t%s\t%c\t%d\t%d\t%d\n",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].scores[0],stu[i].scores[1],stu[i].scores[2]);
return 1;
}
}
return 0;
}
int findName(char chname[30])
{
int i,j=0;
for(i=0;i<count;i++)//tt 0 5
{
if(strcmp(chname,stu[i].name)==0)
{
num[j]=i;//num[0]=0,num[1]=5
j++;
//printf("%s\t%s\t%c\t%d\t%d\t%d\n",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].scores[0],stu[i].scores[1],stu[i].scores[2]);
//flag=1;
// return 1;
}
}
return j;
}
void chaxun()
{
char ch,stuNo[10],stuName[30];
while(1)
{
system("cls");
printf("1)按学号查询\n2)按姓名查询\n3)返回\n");
printf("请输入:");
fflush(stdin);
ch=getchar();
switch(ch)
{
case '1':
printf("请输入学号:");
fflush(stdin);
gets(stuNo);
if(findNo(stuNo)==0)
{
printf("没有该生信息!\n");
}
getch();
break;
case '2':
int a;
printf("请输入学生姓名:");
fflush(stdin);
gets(stuName);
a=findName(stuName);
if(a==0)
{
printf("没有该生信息!\n");
}
else
{
printf("学号\t姓名\t性别\tC语言\tInternet\t计算机结构\n");
int i;
for(i=0;i<a;i++)
{
printf("%s\t%s\t%c\t%d\t%d\t%d\n",stu[num[i]].xuehao,stu[num[i]].name,stu[num[i]].sex,stu[num[i]].scores[0],stu[num[i]].scores[1],stu[num[i]].scores[2]);
}
}
getch();
break;
case '3':
zhujiemian();
return;
}
}
}
void xianshi()
{
int i;
if(count==0)
{
printf("没有学生信息!\n");
}
else
{
printf("学号\t姓名\t性别\tC语言\tInternet\t计算机结构\n");
for(i=0;i<count;i++)
{
printf("%s\t%s\t%c\t%d\t%d\t%d\n",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].scores[0],stu[i].scores[1],stu[i].scores[2]);
}
}
getch();
}
void luru()//
{
int i=count,j,k;
char ch,fenshu[10];
char sub[3][20]={"C语言","Internet","计算机结构"};
do
{
while(1)
{
printf("学号:");
fflush(stdin);
gets(stu[i].xuehao);
if(strlen(stu[i].xuehao)<1)
{
printf("学号不能为空!\n");
continue;
}
for(j=0;j<strlen(stu[i].xuehao);j++)
{
if(stu[i].xuehao[j]>'9'||stu[i].xuehao[j]<'0')
break;
}
if(j<strlen(stu[i].xuehao))
{
printf("学号只能为数字!\n");
continue;
}
break;
}
while(1)
{
printf("姓名:");
fflush(stdin);
gets(stu[i].name);
if(strlen(stu[i].name)<1)
{
printf("姓名不能为空!\n");
continue;
}
for(j=0;j<strlen(stu[i].name);j++)
{
if(stu[i].name[j]>='a'&&stu[i].name[j]<='z'||stu[i].name[j]>='A'&&stu[i].name[j]<='Z')
{
}
else
break;
}
if(j<strlen(stu[i].name))
{
printf("姓名必须为字母!\n");
continue;
}
break;
}
while(1)
{
char chsex[10];
printf("性别(m:男 f:女):");
fflush(stdin);
gets(chsex);
if(strlen(chsex)!=1)
{
printf("性别输入有误!\n");
continue;
}
if(chsex[0]=='m'||chsex[0]=='f')
{
}
else
{
printf("性别只能输入m或f\n");
continue;
}
stu[i].sex=chsex[0];
break;
}
printf("分数:\n");
for(j=0;j<3;j++)
{
while(1)
{
printf("%s:",sub[j]);
fflush(stdin);
gets(fenshu);
if(strlen(fenshu)<1)
{
printf("分数不能为空!\n");
continue;
}
for(k=0;k<strlen(fenshu);k++)
{
if(fenshu[k]>'9'||fenshu[k]<'0')
break;
}
if(k<strlen(fenshu))
{
printf("分数输入有误!\n");
continue;
}
stu[i].scores[j]=atoi(fenshu);
if(stu[i].scores[j]>100||stu[i].scores[j]<0)
{
printf("分数只能在0到100之间!\n");
continue;
}
break;
}
}
i++;
printf("是否继续录入?(按y继续):");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
count=i;
saveFile();
}
void saveFile()//保存学生成绩信息
{
int i;
FILE *wfp;
if((wfp=fopen("student.txt","w"))==NULL)
{
printf("打开文件失败!\n");
return;
}
fprintf(wfp,"学号\t姓名\t性别\tC语言\tInternet\t计算机结构\n");
for(i=0;i<count;i++)
{
fprintf(wfp,"%s\t%s\t%c\t%d\t%d\t%d\n",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].scores[0],stu[i].scores[1],stu[i].scores[2]);
}
fclose(wfp);
}
void zhuce()
{
int i=n,j;
char ch;
while(1)
{
printf("用户名:");
fflush(stdin);
gets(us[i].name);
for(j=0;j<i;j++)
{
if(strcmp(us[j].name,us[i].name)==0)
break;
}
if(j<i)
{
printf("该用户名已经存在!\n");
continue;
}
printf("用户名通过验证!\n");
printf("密码(必须为6位):");
fflush(stdin);
gets(us[i].password);
if(strlen(us[i].password)!=6)
{
printf("密码必须为6位!\n");
continue;
}
else
printf("密码通过验证!\n");
i++;
printf("是否继续?(按n退出):");
fflush(stdin);
ch=getchar();
if(ch=='n'||ch=='N')
break;
}
n=i;
save();
}
void save()//保存已注册用户信息
{
int i;
FILE *wfp;
if((wfp=fopen("user.txt","w"))==NULL)
{
printf("打开文件失败!\n");
return;
}
fprintf(wfp,"用户名\t密码\n");//往文件中读入表标题
for(i=0;i<n;i++)
{
fprintf(wfp,"%s\t%s\n",us[i].name,us[i].password);//格式化往文件中写入一条数据
}
fclose(wfp);
}
void readRecords()//读取学生成绩信息
{
FILE *fp;
int i=count;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("打开文件失败!\n");
return;
}
if(fgetc(fp)==EOF)
return;
rewind(fp);
fscanf(fp,"学号\t姓名\t性别\tC语言\tInternet\t计算机结构\n");
while(!feof(fp))
{
fscanf(fp,"%s\t%s\t%c\t%d\t%d\t%d\n",stu[i].xuehao,stu[i].name,&stu[i].sex,&stu[i].scores[0],&stu[i].scores[1],&stu[i].scores[2]);
i++;
}
count=i;
fclose(fp);
}
void read()//读取用户信息
{
FILE *dfp;
if((dfp=fopen("user.txt","r"))==NULL)//以只读的方式打开文件user.txt
{
printf("打开文件失败!\n");
return;
}
if(fgetc(dfp)==EOF)//先读取一个字符,若读取的字符即为文件的结尾,则说明文件为空,返回
return;
rewind(dfp);//定义文件内部指针到文件的起始位置
fscanf(dfp,"用户名\t密码\n");//读取文件中的表头
while(!feof(dfp))
{
fscanf(dfp,"%s\t%s\n",us[n].name,us[n].password);//从文件中依次读取一条记录,保存到数组us中。
n++;//记录数加1
}
fclose(dfp);
}