|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAX 1000
#define N 100
int flag;//用来标记登录状态
int length = 1;//注册人数
void Fpage();
void menu();
void login();
void browse();
void insert();
void print_back();
void deleter();
void print_one(int);
void search();
void modify();
void browse_x();
void fp_password();
void enroll(int);
struct student//学生信息
{
char num[15];//学号
char name[15];//姓名
char sex[5];//性别
int age;//年龄
char addr[50];//籍贯
char dept[50];//系别
char major[30];//专业
char classroom[30];//班级
char native_changes[30];//学籍
}stu[N];
struct pass{
char name[15];//名字
char num[15];//学号
char dept[50];//系别
char major[30]; //专业
char classnum[30];//班级
char word[30];//密码
char account[30]; //账号
}password[MAX];//存储密码的数组
int main()//主函数
{
Fpage();//首页
menu();//菜单
return 0;
}
void Fpage()//访问首页
{
printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n");
puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
puts("\t ※※ ※※");
puts("\t ※※ ※※");
puts("\t ※※ 欢迎访问学生学籍管理系统! ※※");
puts("\t ※※ ※※");
puts("\t ※※ ※※");
puts("\t ※※ ※※");
puts("\t ※※ ※※");
puts("\t ※※ 制作人:陈茗杰 ※※");
puts("\t ※※ 2022.5.30 ※※");
puts("\t ※※ ※※");
puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("\n\tPress [ Enter ] key to continue……\n");
getchar();
system("cls") ;
}
void menu()//主菜单
{
system("cls");
printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
printf("\n");
int n,r1;//n用来选择功能,r1用来输入错误时重新返回功能
do
{
puts("\t\t★★★★★★★★ 菜单 ★★★★★★★★★");
puts("\t\t★ 1.登录个人账号 ★");
puts("\t\t★ 2.登记学生信息 ★");
puts("\t\t★ 3.删除学生信息 ★");
puts("\t\t★ 4.查找学生信息 ★");
puts("\t\t★ 5.修改学生信息 ★");
puts("\t\t★ 6.浏览学生籍贯 ★");
puts("\t\t★ 7.查询学籍变化 ★");
puts("\t\t★ 8.退出学籍系统 ★");
puts("\t\t★★★★★★★★★★★★★★★★★★★★★★");
printf("请选择服务种类(1-8) : [ ]\b\b");
scanf("%d",&n);
if(n<1||n>8)
{
system("cls");
printf("选择错误!请正确输入!\n");
r1=1;
}
else
r1=0;
}while(r1==1);
switch(n)
{
case 1: login();break;//登录账号
case 2: system("cls"); insert(); break;//插入
case 3: system("cls"); deleter(); break;//删除
case 4: system("cls"); search(); break;//查找
case 5: system("cls"); modify(); break;//修改
case 6: system("cls"); browse(); break;//浏览
case 7: system("cls"); browse_x(); break;//学籍浏览
case 8: system("cls"); exit(0);//退出系统
}
}
//注册账号密码
void enroll(int n)
{
int i;
char newword[20];//密码
if(length == MAX)printf("该系统注册人数已达上限!!暂无法继续注册!!!\n");//防止单次注册人数达到上限
else if(n == 1)
{
printf("\t\t\t请输入您的学号:");
scanf("%s",&password[length].num);//输入学号
printf("\t\t\t请输入您的姓名:");
scanf("%s",&password[length].name);//输入姓名
printf("\t\t\t请输入您的学院:");
scanf("%s",&password[length].dept);//输入学院
printf("\t\t\t请输入您的专业:");
scanf("%s",&password[length].major);//输入专业
printf("\t\t\t请输入您的班级:");
scanf("%s",&password[length].classnum);//输入班级
do
{
printf("\t\t\t请您输入密码:");//输入密码
scanf("%s",&password[length].word);
printf("\t\t\t请您再次输入密码:");
scanf("%s",&newword);//再次输入密码
if(strcmp(newword,password[length].word)){printf("\t\t\t您两次输入的密码不一致!!请您再次输入新密码!!!\n");system("cls");}//提示密码错误
else break;
}while(1);//若密码两次输入不一致,则进行重新输入
printf("\n\n\t\t\t已成功注册!!\n");//提示注册成功
printf("\t\t\t您的账号是%s\n",password[length].num);
printf("\t\t\t您的新密码是%s\n",password[length].word);//生成账号密码
for(i = 0;i < strlen(password[length].classnum);i++)
password[length].account[i] = password[length].num[i];//将账号补充在结构体中的account变量
length++;
}
else if(n == 2){
printf("\t\t\t请输入您的教职工号:");
scanf("%s",&password[length].num);//输入学号
printf("\t\t\t请输入您的姓名:");
scanf("%s",&password[length].name);//输入姓名
printf("\t\t\t请输入您的所在学院:");
scanf("%s",&password[length].dept);//输入学院
do
{
printf("\t\t\t请您输入密码:");//输入密码
scanf("%s",&password[length].word);
printf("\t\t\t请您再次输入密码:");
scanf("%s",&newword);//再次输入密码
if(strcmp(newword,password[length].word))
{
printf("\t\t\t您两次输入的密码不一致!!请您再次输入新密码!!!\n");
system("cls");}//提示密码错误
else break;
}while(1);//若密码两次输入不一致,则进行重新输入
printf("\n\n\t\t\t已成功注册!!\n");//提示注册成功
printf("\t\t\t您的账号是%s\n",password[length].num);
printf("\t\t\t您的新密码是%s\n",password[length].word);//生成账号密码
for(i = 0;i < strlen(password[length].classnum);i++)
password[length].account[i] = password[length].num[i];//将账号补充在结构体中的account变量
length++;
}
fp_password();//将密码保存到文件中
system("pause");
system("cls");
}
//将密码及注册人信息保存到文件
void fp_password()
{
FILE *fp;
int i;
fp=fopen("password.txt","a");//在此路径下创建名为“password.txt”的记事本
for(i=1;i<=length;i++)
{
fprintf(fp,"%s %s %s %s %s %s\n",password[i].num,
password[i].word,
password[i].name,
password[i].major,
password[i].dept,
password[i].classnum);
}
fclose(fp);
}
//核对密码
int fp_wordsearch(char a[] , char b[])
{
FILE *p; //定义文件指针变量
char acc[N] , word[N];//定义字符数组
p = fopen("password.txt","r");//以只读的形式打开password文本文件
if(p == NULL)
{
printf("\t\t\t请先进行注册。\n");//说明未找到情况
return -1;
}
while(!feof(p))
{
fscanf(p,"%s %s",&acc, &word);//从文本中寻找对应的账号密码
if(!strcmp(acc , a)&&!strcmp(word , b))break;//若找到了,则退出循环
}
if(!feof(p))
{
return 1; //若找到了返回1
}
else{
clearerr(p); //使文件错误标志和文件结束标志置为0
return -2;//若找不到,返回-2
}
}
void login()//登录
{
char d, c , w, w1;
char word[N] , acc[N];//定义变量
system("cls");
if(flag) //先判断是否已登录
{
printf("\t\t\t您已经登录!\n");
printf("\t\t\tPress any key to continue...\n");
getchar();
getchar();
system("cls");
menu();
}
printf("\t\t\t————请进行系统登录————\n");
printf("\t\t\t* 1,学生 *\n");
printf("\t\t\t* 2,教师 *\n");
printf("\t\t\t* 0,退出 *\n");
printf("\t\t\t———————————————\n");//系统登录菜单
printf("\t\t\t是否已注册本系统账号(y/n):");
do c = getchar(); while(c != 'y'&&c != 'n');//选择是否进行注册
if(c == 'y')
{
printf("\n\t\t\t请选择身份:");
scanf("%d",&d);
system("pause");
do
{
system("cls");
printf("\t\t\t————请进行系统登录————\n");
printf("\t\t\t* 1,学生 *\n");
printf("\t\t\t* 2,教师 *\n");
printf("\t\t\t* 0,退出 *\n");
printf("\t\t\t———————————————\n");
int i = 0;
printf("\t\t\t账号:");
scanf("%s" , acc); //输入账号
printf("\t\t\t密码:");
getch();
int j=0;//用于密码数组 下标
while(1)
{
word[j]=getch();
if(word[j]=='\r')
break;
printf("*");
j++;
}
flag=0;
word[j]='\0';
if(fp_wordsearch(acc , word) == -2)
{
printf("\n\t\t\t密码或账号输入错误。\n\n");//说明账号密码输入错误的情况
w1=1;
}
else if(fp_wordsearch(acc , word) == 1)
{
printf("\n\t\t\t登录成功。\n");
flag=1;
break;
}//提示账号密码输入正确
system("pause");
}while(w1=1);
printf("\t\t\tPress [Enter] key to continue...\n");
getchar();
system("pause");
system("cls");
menu();
}
//未注册
else
{
printf("\t\t\t请选择身份:");
scanf("%d",&d);
system("pause");
enroll(d);//进行账号密码的注册
do
{
system("cls");
printf("\t\t\t————请进行系统登录————\n");
printf("\t\t\t* 1,学生 *\n");
printf("\t\t\t* 2,教师 *\n");
printf("\t\t\t* 0,退出 *\n");
printf("\t\t\t———————————————\n");//系统登录菜单
printf("\t\t\t是否已注册本系统账号(y/n):");
do c = getchar(); while(c != 'y'&&c != 'n');//选择是否进行注册
int i = 0;
printf("\t\t\t账号:");
scanf("%s" , acc); //输入账号
printf("\t\t\t密码:");
getch();
int j=0;//用于密码数组 下标
while(1)
{
word[j]=getch();
if(word[j]=='\r')
break;
printf("*");
j++;
}
flag=0;
word[j]='\0';
if(fp_wordsearch(acc , word) == -2)
{
printf("\n\t\t\t密码或账号输入错误。\n\n");//说明账号密码输入错误的情况
w1=1;
}
else if(fp_wordsearch(acc , word) == 1)
{
printf("\t\t\t登录成功。\n");
flag=1;
break;
}//提示账号密码输入正确
system("pause");
}while(w1=1);
printf("\t\t\tPress [Enter] key to continue...");
getchar();
system("cls");
menu();
}
}
int load()//打开文件,读取数据
{
FILE *fp;
int i;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("\n文件不存在!请重新输入:\n");
return 0;
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);//将一批数据作为一个整体一次性写入磁盘文件
//fread(buffer,size,cout,fp)
//buffer:数据位置 sizeof:数据字节数 count:读取次数 fp:原磁盘文件指针
fclose(fp);
return(i-1);
}
void input(int k)//输入学生信息
{
getchar();
printf("学号:"); fflush(stdin); gets(stu[k].num); fflush(stdin);
printf("姓名:"); gets(stu[k].name); fflush(stdin);
printf("性别:"); gets(stu[k].sex); fflush(stdin);
printf("年龄:"); scanf("%d",&stu[k].age); getchar();
printf("籍贯:"); gets(stu[k].addr); fflush(stdin);
printf("系别:"); gets(stu[k].dept); fflush(stdin);
printf("专业:"); gets(stu[k].major); fflush(stdin);
printf("班级:"); gets(stu[k].classroom); fflush(stdin);
printf("学籍变化(如入学、转专业、退学、降级、休学、毕业):"); gets(stu[k].native_changes); fflush(stdin);
}
void save(int n)//保留学生信息
{
FILE *fp;
int i;
fp=fopen("student.txt","a");//在路径下打开名为“student.txt”的记事本,并追加
for(i=0;i<=n;i++)
{
fprintf(fp,"%-17s%-17s%-17s%-17d%-17s%-17s%-17s%-17s%-17s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].addr,stu[i].dept,stu[i].major,stu[i].classroom,stu[i].native_changes);
}
fclose(fp);
printf("\t\t\t学生信息保存成功!");
getchar();
}
void insert()//添加学生信息
{
int i,n,k,t;
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)//读入空文件,r表示打开一个文件,只允许读数据
{
printf("\n\t\t\tHow many student do you want to add(1-%d)?:",N-1);
n=0;
}//文件未存数据时 ,总数n为0
else
{
n=load();
printf("\n\t\t\tHow many student do you want to insert(1-%d)?:",N-n-1);
}//文件存有数据,还剩下N-t(已添加人数)可以添加
scanf("%d",&t);
k=n+t;// 现文件存在人数 +要添加的人数
for(i=n;i<k;i++)//从第最后存在人数开始增加
{
printf("\n\t\t\t 输入第%d个学生的学籍信息.\n",i-n+1);
input(i);
}
save(k);//保留所有学生的信息
print_back();
}
void print_back()//添加信息后显示“是浏览还是返回”
{
system("cls");
int w,k=0;
void browse();
void menu();
printf("\n\n\t插入成功\n\n");
do
{
printf("\t\t\tWhat do you want to do next?\n");
printf("\t\t\t1.浏览所有\n");
printf("\t\t\t2.返回\n");
printf("\t\t\t[ ]\b\b");
scanf("%d",&w);
if(w==1)
{
system("cls");
browse();
}
else if(w==2)
{
system("cls");
menu();
}
else
printf("选择错误!请重新选择!\n");
}while(k==0);
}
void deleter()//删除
{
void menu();
if(!flag)
{
printf("\n\n\t请先登录!\n");
printf("\n\t请按Enter 键进入登录界面!");
getchar();
getchar();
login();
}
else
{
struct student s;
int i,n,k,w0,w1;
n=load();
do
{
k=-1;
do
{
printf("\n\n请输入您想要删除的学生的姓名!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0)
{
k=i;
s=stu[i];
}
if(k==-1)
{
int m;
printf("\n\n没有这个学生的信息!\n");
printf("What do you want to do next?1.继续输入 2.返回主菜单 [ ]\b\b");
scanf("%d",&m);
if(m==1)
deleter();
else
{
k=0;
menu();
}
}
}while(k==-1);
print_one(k);
printf("\n\t确定删除?\n\t1.是 2.返回 [ ]\b\b");//再次询问是否删除
scanf("%d",&w0);
if(w0==1)
{
stu[k].name[0]='\0';
save(n);
}
else
break;
printf("\n\t成功删除!\n");
printf("What do you want to do?\n\t1.继续 2.返回 [ ]\b\b");
scanf("%d",&w1);
}while(w1==1);
system("cls");
menu();//不再删除时返回菜单,w1!=1
}
}
void print_one(int k)//输出一个学生的信息
{
printf("学号:%s\n",stu[k].num);
printf("姓名:%s\n",stu[k].name);
printf("性别:%s\n",stu[k].sex);
printf("年龄:%d\n",stu[k].age);
printf("籍贯:%s\n",stu[k].addr);
printf("系别:%s\n",stu[k].dept);
printf("专业:%s\n",stu[k].major);
printf("班级:%s\n",stu[k].classroom);
printf("学籍变化:%s\n",stu[k].native_changes);
}
void print_n(int n)//浏览时输出所有学生的信息
{
int j,i=1;
for(j=0;j<n;j++)
{
printf("第%个学生:\n",i++);
print_one(j);
printf("\n");
}
getchar();
}
void search()//查找
{
void menu();
int w0,k,i,n,w1,w2,a;
struct student s;
FILE *fp;
if((fp=fopen("student.txt","r"))!=NULL)//不是空文件
n=load();
do
{
printf("请选择查找类别:1.姓名 2.学号 [ ]\b\b");
scanf("%d",&w1);getchar();
if(w1>2||w1<1)
{
printf("输入错误!请重新输入!\n");
w2=1;
}
else
w2=0;//加这句是为了能跳出循环
}while(w2==1);
if(w1=1)//姓名查找
{
do
{
k=-1;
do
{
printf("\n请输入您想要查找的学生的姓名!\nName:");
scanf("&s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0)//找到
{
a=i;
s=stu[i];
k=2;
}
if(k==-1)//没有找到
{
int o;
printf("\n\n没有找到这个学生的信息!\n");
printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&o);
if(o==1)
{
system("cls");
search();//继续查找
}
else
{
system("cls");
menu();
}
}
}while(k==1);
system("cls");
print_one(a);//找到以后输出这个学生的信息
printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
system("cls");
menu();//不在寻找时返回菜单
}
else//按学号查找
{
do
{
k=-1;
do
{
printf("\n请输入您想要查找的学生的学号!\nNum:");
scanf("%s",s.num);
for(i=1;i<n;i++)
if(strcmp(s.num,stu[i].num)==0)//找到
{
a=i;
k=2;
s=stu[i];
}
if(k==-1)//没有找到
{
int o;
printf("\n\n没有这个学生的信息!\n!");
printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&o);
if(o==1)
{
system("cls");
search();//继续查找
}
else
{
system("cls");
menu();
}
}
}while(k==-1);
system("cls");
print_one(a);//找到以后输出这个学生的学籍信息
printf("\nWhat do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
system("cls");
menu();//不再查找时返回主菜单
}
}
int modify_data(int i)//修改信息函数
{
int c,w1;
void menu();
do
{
puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.年龄 5.籍贯 6.系别 7.专业 8.班级 9.学籍变化 10.所有信息 11.取消并返回");
printf("请选择?:[ ]\b\b\b");
scanf("%d",&c);
if(c>11||c<1)
{
puts("\n选择错误!请重新选择!");
getchar();
}
}while(c>11||c<1);
do
{
switch(c)
{
case 1: printf("学号:"); scanf("%s",stu[i].num); break;
case 2: printf("姓名:"); scanf("%s",stu[i].name); break;
case 3: printf("性别:"); scanf("%s",stu[i].sex); break;
case 4: printf("年龄:"); scanf("%d",&stu[i].age);break;
case 5: printf("籍贯:"); scanf("%s",stu[i].addr);break;
case 6: printf("系别:"); scanf("%s",stu[i].dept);break;
case 7: printf("专业:"); scanf("%s",stu[i].major);break;
case 8: printf("班级:"); scanf("%s",stu[i].classroom);break;
case 9: printf("学籍变化:");scanf("%s",stu[i].native_changes);break;
case 10: input(i); break; /*修改这个学生的所有信息*/
case 11: menu(); /*返回主菜单*/
}
puts("\nNow:\n");
print_one(i);//输出 修改后 的这个学生的信息
printf("\n确定?\n\n\t1.是 2.否,重新修改 3.返回不保存[ ]\b\b");
scanf("%d",&w1);
}while(w1==2);
return(w1);//修改成功并选择1后返回1
}
void modify()//修改
{
system("cls");
void menu();
if(!flag)
{
printf("\n\n\t请先登录!\n");
printf("\n\t请按Enter 键进入登录界面!");
getchar();
getchar();
login();
}
else
{
struct student s;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
do
{
printf("\n 请输入您想要修改的学生的姓名!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0)//与其中一学生匹配
{
k=1;
s=stu[i];
}
if(k==-1)//没有找到输入的学生
{
int o;
printf("\n\n没有这个学生的信息!\n");
printf("What do you want to do ?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&o);
if(o==1)
{
system("cls");
modify();//继续修改
}
else
{
system("cls");
menu();
}
}
}while(k==-1);
system("cls");
print_one(k);//输出这个学生的信息
w1=modify_data(k);
if(w1==1)//判断是否修改成功
{
printf("\n\t修改成功 \n\n是否继续?\n\n\t1.是 2.保存返回\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{
w0=0;
if(w2==0)
stu[k]=s;
}
if((w0!=1)&&(w2==1))//修改成功保存
save(n);
}while(w0=1);
system("cls");
meun();//不再修改返回主菜单
}
}
void browse()
{
int i,n,a;
FILE *fp;
if((fp=fopen("student.txt","r"))!=NULL)//不是空文件
n=load();//打开文件
printf("********************学生籍贯表*********************\n");
printf("学号 姓名 籍贯\n");
for(i=0;i<=n ;i++)
{
printf("%s %s %s\n",stu[i].num,stu[i].name,stu[i].addr);
}
fclose(fp);
printf("\t\t\tPress [Enter] key to continue...");
getchar();
system("cls");
menu();
}
void browse_x()
{
struct student s;
int i,k,w,w0,n,o;
FILE *fp;
if((fp=fopen("student.txt","r"))!=NULL)//不是空文件
n=load();//打开文件
do
{
k=-1;
do
{
printf("\n请输入您想要查找的学生的学号!\nNum:");
scanf("&s",s.num);
for(i=0;i<n;i++)
if(strcmp(s.num,stu[i].num)==0)//找到
{
w=1;
k=1;
}
if(k==-1)//没有找到
{
int o;
printf("\n\n没有找到这个学生的信息!\n");
printf("What do you want to do?\n\t 1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&o);
if(o==1)
{
system("cls");
w=-1;
}
else
{
system("cls");
menu();
}
}
}while(w==-1);
system("cls");
printf("学号:%s 姓名:%s 学籍:%s \n",stu[i].num,stu[i].name,stu[i].native_changes);;//找到以后输出这个学生的信息
printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
system("cls");
menu;//不在寻找时返回菜单
fclose(fp);
} |
|