|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
[i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 100//存储100个学生信息
int flag;//用来标记登录状态
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();
struct data//出生日期
{
int year;
int month;
int day;
};
struct student//学生信息
{
char num[15];//学号
char name[15];//姓名
char sex[5];//性别
struct data birthday;//出书年月
int age;//年龄
char addr[50];//籍贯
char dept[50];//系别
char major[30];//专业
char class[30];//班级
char native_changes[30];//学籍
}stu[N];
int main()//主函数
{
Fpage();//首页
menu();//菜单
return 0;
}
void Fpage()//访问首页
{
system("color 4e");
printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★");
puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
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("color 2e");
printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
pritnf("\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-7) : [ ]\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;//学籍浏览
}
}
void login()//登录
{
void menu();
system("cls");
if(flag) //先判断是否已登录
{
printf("您已经登录!\n");
printf("Press any key to continue...\n");
getchar();
getchar();
system("cls");
menu();
}
int load();//存储文件
int n,i,m,w;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
n=load();//打开文件
else
n=0;
struct student s;//存储学生账号
char password[20];//存储密码
int d,q;//d是用在第一个输入函数 q是第二个
printf("\n\t请选择登录身份:1.管理员 2.用户 [ ]\b\b");
scanf("%d",&d);
if(d==1)//管理员登录
{
printf("\n\t\t\t请输入密码:");
getchar();
int j=0;//用于密码数组 下标
while(1)
{
password[j]=getchar();
if(password[j]=='\r')
break;
printf("*");
j++;
}
password[j]='\0';
if(!strcmp(password,"123456"))//管理员密码是否正确,初始密码123456
{
flag=1;
printf("\n\t登录成功!\n");
printf("\tPress [Enter] key to continue...");
getchar();
system("cls");
meun();
}
if(!flag)
{
printf("\t\n密码错误!\n");
printf("What do you want to do next? 1.继续登录 2.返回菜单 [ ]\b\b");
scanf("%d",&q);
if(q==1)//继续登录
{
system("cls");
login();
}
else if(q==2)//返回菜单
{
system("cls");
meun();
}
}
}
else//用户登录
{
printf("\n\t\t\t用户名:");
scanf("%s",s.name);
printf("\t\t\t密码:");
int j=0;//密码数组下标
while(1)
{
password[j]=getch();
if(password[j]=='\r')
break;
printf("*");
j++;
}
password[j]='\0';
flag=0;//未登录时flag为0
for(i=0;i<n;i++)
if(!strcmp(s.name,stu[i].name)&&!strcmp(s.name,password))
{
flag=1;//登录成功flag为1
break;
}
if(flag)//登录成功
{
printf("\n\t登录成功!\n");
printf("\tPress any key to continue...\n");
getchar();getchar();
system("cls");
meun();
}
else//登录不成功时
{
m=0;//登陆错误时,防止跳不出登录界面
w=1;//避免过多的“用户不存在”
int q;//q为选项
do
{
if(w>0)
printf("用户不存在或密码错误!\n");//在第一次登录输入不存在的用户时出现
printf("What do you want to do next?1.继续登录 2.返回菜单 [ ]\b\b");
scanf("%d",&q);
if(q==1)//继续登录
{
login();
m=1;
}
else if(q==2)//返回菜单
{
system("cls");
meun();
m=1;
}
else//错误选择
{
printf("选择错误!请重新选择:\n");
w=0;
}
}while(m==0);
}
}
}
int load()//打开文件,读取数据
{
FILE *fp;
int i;
if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入一个空文件,rb为打开二进制文件,只都数据
{
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("学号:"); scanf("%s",stu[k].num); getchar();
printf("姓名:"); scanf("%s",stu[k].name); getchar();
printf("性别:"); scanf("%s",stu[k].sex); getchar();
printf("出生年月:"); scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); getchar();
printf("年龄:"); scanf("%d",&stu[k].age); getchar();
printf("籍贯:"); scanf("%s",stu[k].addr); getchar();
printf("系别:"); scanf("s",stu[k].dept); getchar();
printf("专业:"); scanf("%s",stu[k].major); getchar();
printf("班级:"); scanf("%s",stu[k].class); getchar();
printf("学籍变化:");scanf("%s",stu[k].native_changes); getchar();
}
void save(int n)//保留学生信息
{
void exit();
FILE *fp;
int i;
if((fp=fopen("D:\\file.txt","wb"))==NULL)//只打开或建立一个二进制文件,只允许写数据
{
printf("\n Can not open file!\n");
exit(0);
}
for(i=0;i<n;i++)
if(stu[i].name[0]!='0')
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)//将一批数据作为一个整体一次性写入磁盘文件
printf("文件写入错误\n");
fclose(fp);
}
void insert()//添加学生信息
{
int i,n,k,t;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))==NULL)//读入空文件,rb表示打开一个二进制文件,只允许读数据
{
printf("How many student do you want to add(1-%d)?:",N-1);
n=0;
}
else
{
n=load();
printf("How many student do you want to insert(1-%d)?:",N-n-1);
}
scanf("%d",&t);
k=n+t;
for(i=n;i<k;i++)
{
printf("\n 输入第%d个学生的学籍信息.\n",i-n+1);
input(i);
}
save(k);//保留所有学生的信息
print_back();
}
void print_back()//添加信息后显示“是浏览还是返回”
{
int w,k=0;
void browse();
void menu();
printf("\n\n\t插入成功\n\n");
do
{
printf("What do you want to do next?\n\n\t1.浏览所有\t2.返回:[ ]\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");
meun();//不再删除时返回菜单,w1!=1
}
}
void print_one(int k)//输出一个学生的信息
{
system("color 4e");
printf("学号:%s\n",stu[k].num);
printf("姓名:%s\n",stu[k].name);
printf("性别:%s\n",stu[k].sex);
printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day);
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].class);
printf("学籍变化:%s\n",stu[k].native_changes);
}
void print_n(int n)//浏览时输出所有学生的信息
{
system("color 2e");
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;
struct student s;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
n=load();
do
{
printf("请选择查找类别:1.姓名 2.学号 [ ]\b\b");
scanf("%d",&w1);
if(w1<1||w1>2)
{
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)
{
k=i;
s=stu[i];
}
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");
meun();
}
}
}while(k==1);
sys("cls");
print_one(k);//找到以后输出这个学生的信息
printf("\nWhat do you want to do next?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
system("cls");
meun();//不在寻找时返回菜单
}
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)
{
k=i;
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");
meun();
}
}
}while(k==-1);
system("cls");
print_one(k);//找到以后输出这个学生的学籍信息
printf("\nWhat do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
system("cls");
meun();//不再查找时返回主菜单
}
}
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.所有信息 12.取消并返回");
printf("请选择?:[ ]\b\b\b");
scanf("%d",&c);
if(c>12||c<1)
{
puts("\n选择错误!请重新选择!");
getchar();
}
}while(c>12||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/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break;
case 5: printf("年龄:"); scanf("%d",&stu[i].age);break;
case 6: printf("籍贯:"); scanf("%s",stu[i].addr);break;
case 7: printf("系别:"); scanf("%s",stu[i].dept);break;
case 8: printf("专业:"); scanf("%s",stu[i].major);break;
case 9: printf("班级:"); scanf("%s",stu[i].class);break;
case 10: printf("学籍变化:");scanf("%s",stu[i].native_changes);break;
case 11: input(i); break; /*修改这个学生的所有信息*/
case 12: 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()//修改
{
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");
meun();
}
}
}while(k==-1);
system("cls");
printf_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()
{
system("color 5f");
int i,n;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
n=load();//打开文件
printf("********************学生籍贯表*********************\n");
printf("学号 姓名 籍贯\n");
for(i=1;i<=n ;i++)
{
printf("%d %s %s\n",stu[i].num,stu[i].name,stu[i].addr);
}
fclose(fp);
}
void browse_x()
{
struct student s;
int i,n,t=-1;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))!=NULL)//不是空文件
n=load();//打开文件
printf("请输入要查询学生的学号:");
scanf("%s",s.num);
for (i=1; i<=n; i++)
{
if (s.num==stu[i].num)
{
printf("学号:%ld 姓名:%s 学籍:%s \n",stu[i].num,stu[i].name,stu.native_changes);
t=-2;
}
}
if(t!=-2)
printf("Not found!\n");
}
[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] |
|