#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<windows.h>
#define LEN sizeof(struct Student)
struct Student //学生信息的结构体声明
{
char name[80];
char colleage[80];
char classes[80];//姓名,学院,班级全称
char sex[80];//性别
char number[80];
char day[80];//学号,入学年月日
struct Student *next; //指向下一个结构体的指针
};
typedef struct Student ST;
int write_file(ST *head);//将信息写入文件
ST *read_file(ST *head);//将信息读出文件
void meau();
void created(); //新建一个学生信息
ST *insertd();//插入学生信息
void del();//删除学生信息
void revise();//修改学生信息
void search1();//按学号查询学生信息
void search2();//按班级查找学生信息
void meau()
{
char inputnumber;
printf("\n\n\n\n 请选择接下来要进行的操作:\n\n");
printf(" 1.录入一个学生信息\n\n");
printf(" 2.删除一个学生信息\n\n");
printf(" 3.修改一个学生信息\n\n");
printf(" 4.按学号查询一个学生信息\n\n");
printf(" 5.按班级查询学生信息\n\n");
printf(" 6.退出系统");
printf(" 请输入相应操作的编号:");
scanf("%c",&inputnumber);
system("cls");
switch(inputnumber)
{
case '1':created();
break;
case '2':del();
break;
case '3':revise();
break;
case '4':search1();
break;
case '5':search2();
break;
case '6':
printf("\n\n\n感谢使用~下次再见~\n\n~");
exit(0);
default:
{
printf("请输入正确数字!\n");
meau();
}
}
}
ST *read_file(ST *head)
{
ST *p1=NULL,*p2=NULL;
FILE *fp1;
int flag=1;
fp1=fopen("student.txt","r");
if(!fp1)
{
fp1=fopen("student.txt","w");return head;
}
p1=(ST *)malloc(sizeof(ST));
while(fscanf(fp1,"%s%s%s%s%s%s",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day)>0)
{p1->next=NULL;
if(head==NULL){
head=p1;
}
else{
p2->next=p1;
}
p2=p1;
p1=(ST *)malloc(sizeof(ST));
}
fclose(fp1);
return head;
}
int write_file(ST *head)
{
FILE *fp1;
ST *p1=head;
fp1=fopen("student.txt","w");
if(!fp1)
{
printf("对不起,打开文件失败\n");
return 0;
}
while(p1)
{
fprintf(fp1,"%s\n%s\n%s\n%s\n%s\n%s\n\n",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day);
p1=p1->next;
}
fclose(fp1);
free(p1);
return 0;
}
void created()//在链表中创建一个学生信息
{
ST *head=NULL,*p1=NULL;
head=read_file(head);
p1=(ST*)malloc(sizeof(LEN));
printf(" 请按照以下顺序输入一个学生信息,【每项一行】!\n\n");//对学生总数的提示,并且提示每个学生信息的输入顺序
printf(" ①姓名②学院③班级全称④性别⑤学号⑥入学年月日\n\n"); //每个学生信息的输入顺序
scanf("%s%s%s%s%s%s",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day);
p1->next=NULL;
head=insertd(p1,head);
printf("已成功录入一个学生信息~!");
Sleep(1000);
write_file(head);
free(p1);
meau();
}
ST *insertd(ST *p,ST *head){
ST *q=head,*q1=NULL;
if(head==NULL){head=p;p->next=NULL;return p;}
while(q){
if(strcmp(p->number,q->number)==0){
printf("该学生之前已经录入无需重复添加\n");break;
}q1=q;q=q->next;
}
if(q==NULL)
{
p->next=head;
head=p;
return head;
}
}
void del()//删除学生信息的功能函数
{
char num[13];
struct Student *head=NULL,*p1,*p2;
head=read_file(head);
p1=head;
if (head == NULL)//对空链表删除的情况处理
{
printf(" 系统中没有学生信息,结束删除\n");
Sleep(2000);
meau();
}
printf(" 请输入要删除的学生学号: ");//求用户输入要删除的学生学号
scanf("%s",num);
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,num)==0)
{
if(p1==head)
head=p1->next;
else p2->next=p1->next;
}
free(p1);
p1=NULL;
printf("\n\n\n\n\t\t\t已成功删除啦!");
write_file(head);
Sleep(1000);
system("pause");
meau();
}
void search1()//查询函数的定义
{
ST *head=NULL;
ST *p1,*p2;
char num[13];
head=read_file(head);
p1=head;
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
printf(" 请输入需要查询的学生学号: ");
scanf("%s",num);
getchar();
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,num)==0)//查找成功,输出该学生信息
{
printf("\n\n 姓名:%s\n",p1->name);
printf("\n\n 学院:%s\n",p1->colleage);
printf("\n\n 班级全称:%s\n",p1->classes);
printf("\n\n 性别:%s\n",p1->sex);
printf("\n\n 学号:%s\n",p1->number);
printf("\n\n 入学年月:%s\n",p1->day);
}
if(p1==NULL)
{
printf(" 找不到该学生\n");
Sleep(2000);
meau();
}
meau();
}
void search2()
{
system("cls");
char inclass[30];
int flag=0,a;
ST *p1,*head=NULL;
head=read_file(head);
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
p1=head;
printf("\t\t请输入班级全称:\n");
scanf("%s",inclass);
getchar();
while(p1!=NULL)
{
if(strcmp(p1->classes,inclass)==0)
{
printf("\n 姓名:%s",p1->name);
printf("\n 学院:%s",p1->colleage);
printf("\n 班级全称:%s",p1->classes);
printf("\n 性别:%s",p1->sex);
printf("\n 学号:%s",p1->number);
printf("\n 入学年月:%s",p1->day);
printf("\n---------------------------------------");
flag=1;
}
p1=p1->next;
}
if(!flag)
printf("啊嘞!找不到该班级!\n");
printf("输入数字0可返回主菜单哟~");
if(scanf("%d",&a)==0)
meau();
else meau();
}
void revise()
{
system("cls");
ST *p1,*p2,*head=NULL;
head=read_file(head);
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
char num[13];
char n,i;
printf("请输入要修改的学生学号:");
scanf("%s",num);
getchar();
p1=head;
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p1=p1->next;
}
if(p1==NULL)
{
printf("\n没有找到这家伙哟\n");
Sleep(2000);
getchar();
meau();
}
else
{
p2=(ST*)malloc(sizeof(LEN));
printf("\n\n请输入序号选择要修改的内容:");
printf("\n\t\t1.姓名");
printf("\n\t\t2.学院");
printf("\n\t\t3.班级全称");
printf("\n\t\t4.性别");
printf("\n\t\t5.学号");
printf("\n\t\t6.入学时间\n\n");
scanf("%c",&n);
switch(n)
{
case '1':
printf("\n\n\t请输入修改后的姓名;\n");char ch=getchar();
scanf("%s",p2->name);strcpy(p1->name,p2->name);
break;
case '2':
printf("\n\n\t请输入修改后的学院;\n");
scanf("%s",p2->colleage);strcpy(p1->colleage,p2->colleage);
break;
case '3':
printf("\n\n\t请输入修改后的班级;\n");
scanf("%s",p2->classes);
strcpy(p1->classes,p2->classes);
break;
case '4':
printf("\n\n\t请输入修改后的性别;\n");
scanf("%s",p2->sex);strcpy(p1->sex,p2->sex);
break;
case '5':
printf("\n\n\t请输入修改后的学号;\n");
scanf("%s",p2->number);strcpy(p1->number,p2->number);
break;
case '6':
printf("\n\n\t请输入修改后的入学时间:\n");
scanf("%s",p2->day);strcpy(p1->day,p2->day);
break;
default:
printf("\n\n电脑无法识别你输入的东西哟~\n");
printf("输入数字0返回主菜单~!");
scanf("%d",&i);
if(i==0) meau();
break;
}
}
free(p2);
write_file(head);
printf("已修改好了!");
Sleep(2000);system("cls");
getchar();
meau();
}
int main()
{
//system("title 学生证管理程序");
system("color 1B");
char passwords;//输入密码正确才可以进行下一步操作//
char a[9];
int i;
printf("\n\n\n\n 欢迎使用这个功能简单的学生证管理程序\n\n\n");
printf(" 请输入8位数密码(提示:123*****):");
for(i=0;i<8;i++)
{
passwords=getch();
printf("*");
a[i]=passwords;
}
a[8]='\0';
printf("\n");
if((strcmp(a,"12345678"))==0)
{
system("cls");
printf("\n\n\n\n\n 成功登陆!");
Sleep(1000);
system("cls");
}
else
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n 密码错误,您无权使用该系统!\n\n");
Sleep(2000);
exit(1);
}
meau();
}
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<windows.h>
#define LEN sizeof(struct Student)
struct Student //学生信息的结构体声明
{
char name[80];
char colleage[80];
char classes[80];//姓名,学院,班级全称
char sex[80];//性别
char number[80];
char day[80];//学号,入学年月日
struct Student *next; //指向下一个结构体的指针
};
typedef struct Student ST;
int write_file(ST *head);//将信息写入文件
ST *read_file(ST *head);//将信息读出文件
void meau();
void created(); //新建一个学生信息
ST *insertd();//插入学生信息
void del();//删除学生信息
void revise();//修改学生信息
void search1();//按学号查询学生信息
void search2();//按班级查找学生信息
void meau()
{
char inputnumber;
printf("\n\n\n\n 请选择接下来要进行的操作:\n\n");
printf(" 1.录入一个学生信息\n\n");
printf(" 2.删除一个学生信息\n\n");
printf(" 3.修改一个学生信息\n\n");
printf(" 4.按学号查询一个学生信息\n\n");
printf(" 5.按班级查询学生信息\n\n");
printf(" 6.退出系统");
printf(" 请输入相应操作的编号:");
scanf("%c",&inputnumber);
system("cls");
switch(inputnumber)
{
case '1':created();
break;
case '2':del();
break;
case '3':revise();
break;
case '4':search1();
break;
case '5':search2();
break;
case '6':
printf("\n\n\n感谢使用~下次再见~\n\n~");
exit(0);
default:
{
printf("请输入正确数字!\n");
meau();
}
}
}
ST *read_file(ST *head)
{
ST *p1=NULL,*p2=NULL;
FILE *fp1;
int flag=1;
fp1=fopen("student.txt","r");
if(!fp1)
{
fp1=fopen("student.txt","w");return head;
}
p1=(ST *)malloc(sizeof(ST));
while(fscanf(fp1,"%s%s%s%s%s%s",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day)>0)
{p1->next=NULL;
if(head==NULL){
head=p1;
}
else{
p2->next=p1;
}
p2=p1;
p1=(ST *)malloc(sizeof(ST));
}
fclose(fp1);
return head;
}
int write_file(ST *head)
{
FILE *fp1;
ST *p1=head;
fp1=fopen("student.txt","w");
if(!fp1)
{
printf("对不起,打开文件失败\n");
return 0;
}
while(p1)
{
fprintf(fp1,"%s\n%s\n%s\n%s\n%s\n%s\n\n",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day);
p1=p1->next;
}
fclose(fp1);
free(p1);
return 0;
}
void created()//在链表中创建一个学生信息
{
ST *head=NULL,*p1=NULL;
head=read_file(head);
p1=(ST*)malloc(sizeof(LEN));
printf(" 请按照以下顺序输入一个学生信息,【每项一行】!\n\n");//对学生总数的提示,并且提示每个学生信息的输入顺序
printf(" ①姓名②学院③班级全称④性别⑤学号⑥入学年月日\n\n"); //每个学生信息的输入顺序
scanf("%s%s%s%s%s%s",p1->name,p1->colleage,p1->classes,p1->sex,p1->number,p1->day);
p1->next=NULL;
head=insertd(p1,head);
printf("已成功录入一个学生信息~!");
Sleep(1000);
write_file(head);
free(p1);
meau();
}
ST *insertd(ST *p,ST *head){
ST *q=head,*q1=NULL;
if(head==NULL){head=p;p->next=NULL;return p;}
while(q){
if(strcmp(p->number,q->number)==0){
printf("该学生之前已经录入无需重复添加\n");break;
}q1=q;q=q->next;
}
if(q==NULL)
{
p->next=head;
head=p;
return head;
}
}
void del()//删除学生信息的功能函数
{
char num[13];
struct Student *head=NULL,*p1,*p2;
head=read_file(head);
p1=head;
if (head == NULL)//对空链表删除的情况处理
{
printf(" 系统中没有学生信息,结束删除\n");
Sleep(2000);
meau();
}
printf(" 请输入要删除的学生学号: ");//求用户输入要删除的学生学号
scanf("%s",num);
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,num)==0)
{
if(p1==head)
head=p1->next;
else p2->next=p1->next;
}
free(p1);
p1=NULL;
printf("\n\n\n\n\t\t\t已成功删除啦!");
write_file(head);
Sleep(1000);
system("pause");
meau();
}
void search1()//查询函数的定义
{
ST *head=NULL;
ST *p1,*p2;
char num[13];
head=read_file(head);
p1=head;
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
printf(" 请输入需要查询的学生学号: ");
scanf("%s",num);
getchar();
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,num)==0)//查找成功,输出该学生信息
{
printf("\n\n 姓名:%s\n",p1->name);
printf("\n\n 学院:%s\n",p1->colleage);
printf("\n\n 班级全称:%s\n",p1->classes);
printf("\n\n 性别:%s\n",p1->sex);
printf("\n\n 学号:%s\n",p1->number);
printf("\n\n 入学年月:%s\n",p1->day);
}
if(p1==NULL)
{
printf(" 找不到该学生\n");
Sleep(2000);
meau();
}
meau();
}
void search2()
{
system("cls");
char inclass[30];
int flag=0,a;
ST *p1,*head=NULL;
head=read_file(head);
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
p1=head;
printf("\t\t请输入班级全称:\n");
scanf("%s",inclass);
getchar();
while(p1!=NULL)
{
if(strcmp(p1->classes,inclass)==0)
{
printf("\n 姓名:%s",p1->name);
printf("\n 学院:%s",p1->colleage);
printf("\n 班级全称:%s",p1->classes);
printf("\n 性别:%s",p1->sex);
printf("\n 学号:%s",p1->number);
printf("\n 入学年月:%s",p1->day);
printf("\n---------------------------------------");
flag=1;
}
p1=p1->next;
}
if(!flag)
printf("啊嘞!找不到该班级!\n");
printf("输入数字0可返回主菜单哟~");
if(scanf("%d",&a)==0)
meau();
else meau();
}
void revise()
{
system("cls");
ST *p1,*p2,*head=NULL;
head=read_file(head);
if (head==NULL)//对查询空链表时的操作
{
printf(" 系统中没有学生信息,请新建学生信息\n");
Sleep(2000);
meau();
}
char num[13];
char n,i;
printf("请输入要修改的学生学号:");
scanf("%s",num);
getchar();
p1=head;
while(p1!=NULL&&strcmp(p1->number,num)!=0)
{
p1=p1->next;
}
if(p1==NULL)
{
printf("\n没有找到这家伙哟\n");
Sleep(2000);
getchar();
meau();
}
else
{
p2=(ST*)malloc(sizeof(LEN));
printf("\n\n请输入序号选择要修改的内容:");
printf("\n\t\t1.姓名");
printf("\n\t\t2.学院");
printf("\n\t\t3.班级全称");
printf("\n\t\t4.性别");
printf("\n\t\t5.学号");
printf("\n\t\t6.入学时间\n\n");
scanf("%c",&n);
switch(n)
{
case '1':
printf("\n\n\t请输入修改后的姓名;\n");char ch=getchar();
scanf("%s",p2->name);strcpy(p1->name,p2->name);
break;
case '2':
printf("\n\n\t请输入修改后的学院;\n");
scanf("%s",p2->colleage);strcpy(p1->colleage,p2->colleage);
break;
case '3':
printf("\n\n\t请输入修改后的班级;\n");
scanf("%s",p2->classes);
strcpy(p1->classes,p2->classes);
break;
case '4':
printf("\n\n\t请输入修改后的性别;\n");
scanf("%s",p2->sex);strcpy(p1->sex,p2->sex);
break;
case '5':
printf("\n\n\t请输入修改后的学号;\n");
scanf("%s",p2->number);strcpy(p1->number,p2->number);
break;
case '6':
printf("\n\n\t请输入修改后的入学时间:\n");
scanf("%s",p2->day);strcpy(p1->day,p2->day);
break;
default:
printf("\n\n电脑无法识别你输入的东西哟~\n");
printf("输入数字0返回主菜单~!");
scanf("%d",&i);
if(i==0) meau();
break;
}
}
free(p2);
write_file(head);
printf("已修改好了!");
Sleep(2000);system("cls");
getchar();
meau();
}
int main()
{
//system("title 学生证管理程序");
system("color 1B");
char passwords;//输入密码正确才可以进行下一步操作//
char a[9];
int i;
printf("\n\n\n\n 欢迎使用这个功能简单的学生证管理程序\n\n\n");
printf(" 请输入8位数密码(提示:123*****):");
for(i=0;i<8;i++)
{
passwords=getch();
printf("*");
a[i]=passwords;
}
a[8]='\0';
printf("\n");
if((strcmp(a,"12345678"))==0)
{
system("cls");
printf("\n\n\n\n\n 成功登陆!");
Sleep(1000);
system("cls");
}
else
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n 密码错误,您无权使用该系统!\n\n");
Sleep(2000);
exit(1);
}
meau();
}