#include<stdio.h>
//#include<dos.h>
#include<stdlib.h>
#include<string.h>
//#include<mem.h>
#include<ctype.h>
//#include<malloc.h>
typedef struct stu
{
char num[10];
char name[5];
char sex[2];
int age;
char addr[16];
char major[16];
char xb[16];
struct stu *next;
}STUDENT;
STUDENT*init(); //初始化函数 \/
int menu_select(); //菜单函数 \/
STUDENT*create(); //注册学生信息函数 \/
void search(STUDENT*head); //查询函数 \/
void printstu(STUDENT*head); //显示学生信息函数
void revise(STUDENT *head); //修改函数 \/
STUDENT*del(STUDENT*head); //删除函数 \/
void save(STUDENT *head); //保存文件函数 \/
STUDENT *read(STUDENT *head);//读取文件函数(读文件)
int main()
{
STUDENT *head;
head = init();
int nam,secret; /*登录操作使用的变量*/
printf("\n\n\n\n");
printf("\t------------------------学生学学籍管理系统------------------------\n");
printf("\n\n");
printf("\t\t\t\t账号:");
scanf("%d", &nam);
printf("\n");
printf("\t\t\t\t密码:");
scanf("%d", &secret);
//system("cls");
if(nam == 172021 && secret==172021)
{
printf("\n\n");
printf("\t\t\t\t登录成功!!!\n\n");
for(;;)
{
switch(menu_select())
{
case 1:
head = create();//注册
break;
case 2:
search(head);//查询
break;
case 3:
revise(head);//修改
break;
case 4:
head=del(head);//删除
break;
case 5:
printstu(head);//显示信息
break;
case 6:
exit(0);//退出系统
break;
default:
printf("输入错误");
break;
}
}
}
else
{
printf("输入错误,请重新登录");
}
}
STUDENT*init()//初始化函数操作
{
return NULL;
}
int menu_select()//菜单函数
{
int n;
//printf("\n按确定键进入菜单\n");
//getchar();
//system("cls");
printf("****************************欢迎使用学生学学籍管理系统***********************\n");
printf("\n");
printf(" ----------菜单--------- \n");
printf("\n\n");
printf("\t\t\t1.\t注册学生信息\n\n\t\t\t2.\t查询学生信息\n\n\t\t\t3.\t修改学生信息\n\n\t\t\t4.\t删除学生信息\n\n\t\t\t5.\t显示已存入学生信息\n\n\t\t\t6.\t退出系统\n\n");
do
{
printf("输入你的选择: ");
scanf("%d", &n);
} while(n<1||n>9);
return(n);
}
STUDENT *create()//创建链表,注册学生信息
{
char answer;
STUDENT *head=NULL;
STUDENT *p;
STUDENT *last=NULL;
//system("cls");
do
{
p = (STUDENT *)malloc(sizeof(STUDENT));
if (!p)
exit(0);
printf("\n\n");
printf("----------学生信息录入---------- \n");
printf("\n");
printf("------请输入:\n");
printf("\t学号:");
scanf("%s", p->num);
printf("\t姓名:");
scanf("%s", p->name);
printf("\t性别:");
scanf("%s", p->sex);
printf("\t年龄:");
scanf("%d", &p->age);
printf("\t户籍:");
scanf("%s", p->addr);
printf("\t专业:");
scanf("%s", p->major);
printf("\t系别:");
scanf("%s", p->xb);
printf("\n");
printf("\t是否继续录入?(Y or N): ");
getchar(); /* for '\n' */
scanf("%c", &answer);
if(last) {
last->next = p;
last = last->next;
} else {
last = p;
head = last;
}
} while(answer=='Y'||answer=='y');
//last->next =read(head);
save(head); /* store infor into file */
//read(head);
printf("\n");
printf("\t保存成功!!!\n\n");
return head;
}
void save(STUDENT *head)//保存文件函数(写文件)
{
FILE *fp;
STUDENT *p;
p=head;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("failed to open the file!!");
exit(1);
}
while(p!=NULL)
{
fprintf(fp,"%s %s %s %d %s %s %s \n",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
p=p->next;
}
fclose(fp);
}
/*STUDENT *read(STUDENT *head)//读取文件函数(读文件)
{
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("failed to open the file!!");
return head;
}
STUDENT *new_1=(STUDENT *)malloc(sizeof(STUDENT));
STUDENT *head1=new_1;
while(!feof(fp))
{
STUDENT *q=(STUDENT *)malloc(sizeof(STUDENT));
fscanf(fp,"\n%s %s %s %d %s %s %s",q->num,q->name,q->sex,q->age,q->addr,q->major,q->xb);
new_1->next=q;
new_1=q;
}
new_1->next=NULL;
return head1;
fclose(fp);*/
/*FILE *fp;
STUDENT *p;
p=head;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("failed to open the file!!");
exit(1);
}
while(p!=NULL)
{
fscanf(fp,"\n%s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
p=p->next;
}
fclose(fp);
//#include<dos.h>
#include<stdlib.h>
#include<string.h>
//#include<mem.h>
#include<ctype.h>
//#include<malloc.h>
typedef struct stu
{
char num[10];
char name[5];
char sex[2];
int age;
char addr[16];
char major[16];
char xb[16];
struct stu *next;
}STUDENT;
STUDENT*init(); //初始化函数 \/
int menu_select(); //菜单函数 \/
STUDENT*create(); //注册学生信息函数 \/
void search(STUDENT*head); //查询函数 \/
void printstu(STUDENT*head); //显示学生信息函数
void revise(STUDENT *head); //修改函数 \/
STUDENT*del(STUDENT*head); //删除函数 \/
void save(STUDENT *head); //保存文件函数 \/
STUDENT *read(STUDENT *head);//读取文件函数(读文件)
int main()
{
STUDENT *head;
head = init();
int nam,secret; /*登录操作使用的变量*/
printf("\n\n\n\n");
printf("\t------------------------学生学学籍管理系统------------------------\n");
printf("\n\n");
printf("\t\t\t\t账号:");
scanf("%d", &nam);
printf("\n");
printf("\t\t\t\t密码:");
scanf("%d", &secret);
//system("cls");
if(nam == 172021 && secret==172021)
{
printf("\n\n");
printf("\t\t\t\t登录成功!!!\n\n");
for(;;)
{
switch(menu_select())
{
case 1:
head = create();//注册
break;
case 2:
search(head);//查询
break;
case 3:
revise(head);//修改
break;
case 4:
head=del(head);//删除
break;
case 5:
printstu(head);//显示信息
break;
case 6:
exit(0);//退出系统
break;
default:
printf("输入错误");
break;
}
}
}
else
{
printf("输入错误,请重新登录");
}
}
STUDENT*init()//初始化函数操作
{
return NULL;
}
int menu_select()//菜单函数
{
int n;
//printf("\n按确定键进入菜单\n");
//getchar();
//system("cls");
printf("****************************欢迎使用学生学学籍管理系统***********************\n");
printf("\n");
printf(" ----------菜单--------- \n");
printf("\n\n");
printf("\t\t\t1.\t注册学生信息\n\n\t\t\t2.\t查询学生信息\n\n\t\t\t3.\t修改学生信息\n\n\t\t\t4.\t删除学生信息\n\n\t\t\t5.\t显示已存入学生信息\n\n\t\t\t6.\t退出系统\n\n");
do
{
printf("输入你的选择: ");
scanf("%d", &n);
} while(n<1||n>9);
return(n);
}
STUDENT *create()//创建链表,注册学生信息
{
char answer;
STUDENT *head=NULL;
STUDENT *p;
STUDENT *last=NULL;
//system("cls");
do
{
p = (STUDENT *)malloc(sizeof(STUDENT));
if (!p)
exit(0);
printf("\n\n");
printf("----------学生信息录入---------- \n");
printf("\n");
printf("------请输入:\n");
printf("\t学号:");
scanf("%s", p->num);
printf("\t姓名:");
scanf("%s", p->name);
printf("\t性别:");
scanf("%s", p->sex);
printf("\t年龄:");
scanf("%d", &p->age);
printf("\t户籍:");
scanf("%s", p->addr);
printf("\t专业:");
scanf("%s", p->major);
printf("\t系别:");
scanf("%s", p->xb);
printf("\n");
printf("\t是否继续录入?(Y or N): ");
getchar(); /* for '\n' */
scanf("%c", &answer);
if(last) {
last->next = p;
last = last->next;
} else {
last = p;
head = last;
}
} while(answer=='Y'||answer=='y');
//last->next =read(head);
save(head); /* store infor into file */
//read(head);
printf("\n");
printf("\t保存成功!!!\n\n");
return head;
}
void save(STUDENT *head)//保存文件函数(写文件)
{
FILE *fp;
STUDENT *p;
p=head;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("failed to open the file!!");
exit(1);
}
while(p!=NULL)
{
fprintf(fp,"%s %s %s %d %s %s %s \n",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
p=p->next;
}
fclose(fp);
}
/*STUDENT *read(STUDENT *head)//读取文件函数(读文件)
{
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("failed to open the file!!");
return head;
}
STUDENT *new_1=(STUDENT *)malloc(sizeof(STUDENT));
STUDENT *head1=new_1;
while(!feof(fp))
{
STUDENT *q=(STUDENT *)malloc(sizeof(STUDENT));
fscanf(fp,"\n%s %s %s %d %s %s %s",q->num,q->name,q->sex,q->age,q->addr,q->major,q->xb);
new_1->next=q;
new_1=q;
}
new_1->next=NULL;
return head1;
fclose(fp);*/
/*FILE *fp;
STUDENT *p;
p=head;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("failed to open the file!!");
exit(1);
}
while(p!=NULL)
{
fscanf(fp,"\n%s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
p=p->next;
}
fclose(fp);
}*/
void search(STUDENT *head)//搜素学生信息函数函数
{
STUDENT *p;
char s[5];//存放待搜索学生姓名
//system("cls");
printf("请输入要查找的学生姓名;");
scanf("%s", s);
p = head;
while (p && strcmp(p->name,s)) {
p = p->next;
}
if(p)
{
printf("已找到该学生信息!!!\n\n");
printf("----------------------------------------------------------------\n");
printf("| 学号 | 姓名 | 性别 | 年龄 | 户籍 | 专业 | 系别 |\n");
printf("-----------------------------------------------------------------\n");
printf(" %s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
printf("\n");
}
else
{
printf("没有找到该学生");
}
}
STUDENT*del(STUDENT*head)//删除信息函数
{
if (!head)
return NULL;
STUDENT *p1,*p2;//p1为查找的需要删除节点,p2为其前驱指针
char c,s[6];
//system("cls");
printf("请输入要删除的学生学号;\n");
scanf("%s",s);
p1=p2=head;//将头指针分别赋给p1,p2
if (strcmp(head->num, s) == 0) {
printf("----------------------------------------------------------------\n");
printf("| 学号 | 姓名 | 性别 | 年龄 | 户籍 | 专业 | 系别 |\n");
printf("-----------------------------------------------------------------\n");
printf(" %s %s %s %d %s %s %s",p1->num,p1->name,p1->sex,p1->age,p1->addr,p1->major,p1->xb);
head = head->next;
printf("\n\n");
printf("已删除!!!\n\n");
return head;
}
while(p1 && strcmp(p1->name, s))
{
p2 = p1;
p1 = p1->next;
}
if (!p1) {
printf("没有这个学生的信息!!!\n\n");
return head;
}
if(strcmp(p1->name,s) == 0) //学号被找到
{
printf("----------------------------------------------------------------\n");
printf("| 学号 | 姓名 | 性别 | 年龄 | 户籍 | 专业 | 系别 |\n");
printf("-----------------------------------------------------------------\n");
printf(" %s %s %s %d %s %s %s",p1->num,p1->name,p1->sex,p1->age,p1->addr,p1->major,p1->xb);
printf("\n\n");
printf("是否要删除该学生,输入Y删除,输入N退出:");
getchar();
scanf("%c",&c);
if(c=='N'||c=='n')
printf("exit");
else
{
if(p1==head)//如果删除的是首节点
{
head=p1->next;
}
else
{
p2->next=p1->next;
free(p1);
}
printf("\n学号为;%s的学生信息已被删除",s);
return (head);
}
}
return head;
}
void revise(STUDENT *head)//修改函数
{
if (!head)
return;
int n;
STUDENT *p;
char s[5];//存放待搜索学生姓名
//system("cls");
printf("请输入要查找的学生姓名;");
scanf("%s", s);
p=head;
while(p && strcmp(p->name,s))
{
p = p->next;
}
if (!p) {
printf("没有找到该学生");
return;
}
if (p)
{
printf("已找到该学生信息!!!\n");
printf("----------------------------------------------------------------\n");
printf("| 学号 | 姓名 | 性别 | 年龄 | 户籍 | 专业 | 系别 |\n");
printf("-----------------------------------------------------------------\n");
printf(" %s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
printf("\n\n");
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 专业 请按 2 |\n");
printf("| 户籍 请按 3 |\n");
printf("| 系别 请按 4 |\n");
printf("+----------------------+\n");
printf("请输入您的选择: ");
scanf("%d", &n);
printf("\n");
switch(n)
{
case 1:
printf("请输入新姓名");
scanf("%s",p->name);
break;
case 2:
printf("请输入新专业");
scanf("%s",p->major);
break;
case 3:
printf("请输入新户籍");
scanf("%s",p->addr);
break;
case 4:
printf("请输入新系别");
scanf("%s",p->xb);
break;
default:
printf("输入错误");
break;
}
printf("\n修改成功!!!\n");
}
}
void printstu(STUDENT*head)//显示学生信息函数
{
STUDENT *p;
printf("------------------------------------------------------------------\n");
printf("| 学号 | 姓名 | 性别 | 年龄 | 户籍 | 专业 | 系别 |\n");
printf("------------------------------------------------------------------\n");
p=head;
while(p!=NULL)
{
printf(" %s %s %s %d %s %s %s",p->num,p->name,p->sex,p->age,p->addr,p->major,p->xb);
p=p->next;
printf("\n");
printf("\n");
}
printf("\n");
printf("显示完毕!!!\n\n");
}