学生信息管理系统
来源:互联网 发布:淘宝达人粉丝怎么到100 编辑:程序博客网 时间:2024/05/27 21:05
1、非链表实现:
本系统包括以下功能:
1、学生信息的整体注册
2、学生信息的修改
3、学生成绩信息的录入
4、学生信息的添加
5、恢复误删的学生信息
6、学生信息的删除
7、密码修改保存函数
8、学生信息的查询
9、密码修改函数
10、学生信息管理系统的菜单函数
- #include "malloc.h"
- #include "string.h"
- #include "stdlib.h"
- #include "conio.h"
- #define M 3
- struct student
- {
- char num[10]; /* 学生的学号 */
- char name[20]; /* 学生的姓名 */
- char sex[5]; /* 学生的性别 */
- int age; /* 学生的年龄 */
- char birth[20]; /* 学生的出生年月 */
- long tele; /* 学生的电话号码 */
- char addr[30]; /* 学生的地址 */
- char party[10]; /* 学生是否为党员 */
- float score[M]; /* 学生各门学科成绩 */
- float total; /* 学生的学科成绩总分 */
- struct student *next;
- }stud[100];
- struct secret
- {
- char user[30];
- char code[30];
- }use[100];
- int len; //学生人数
- /////////////////////////////////////////////////////////////////////////////////
- /*学生信息写入到文件中-----系统函数*/
- /////////////////////////////////////////////////////////////////////////////////
- void writetxt(struct student *head)
- {
- struct student *p;
- p=head;
- FILE *fp;
- fp=fopen("d://student.txt","wb");
- if(fp==NULL)
- {
- printf("cannot open");
- return ;
- }
- while(p!=NULL)
- {
- fwrite(p,sizeof(struct student),1,fp);
- p=p->next;
- }
- fclose(fp);
- }
- /////////////////////////////////////////////////////////////////////////////////
- /* 学生信息的整体注册*/
- /////////////////////////////////////////////////////////////////////////////////
- struct student *create( )
- {
- char ch;
- char ok;
- int i;
- struct student *p,*p1,*head,*p2;
- FILE *fp;
- fp=fopen("d://student.txt","rb");
- if(fp==NULL)
- {
- printf("/n 文件还不存在,是否创建?(Y/N)/n");
- ch=getchar();
- len=1;
- scanf("%c",&ok);
- if(ok=='Y'||ok=='y')
- {
- p1=p2=(struct student *) malloc(sizeof(struct student));
- if((len)<10)
- printf("请输入0%d的学号:",len);
- else
- printf("请输入%d的学号:",len);
- scanf("%s",p1->num);
- if((len)<10)
- printf("请输入0%d的姓名:",len);
- else
- printf("请输入%d的姓名:",len);
- scanf("%s",p1->name);
- if((len)<10)
- printf("请输入0%d的性别:",len);
- else
- printf("请输入%d的性别:",len);
- scanf("%s",p1->sex);
- ch=getchar();
- if((len)<10)
- printf("请输入0%d的年龄:",len);
- else
- printf("请输入%d的年龄:",len);
- scanf("%d",&p1->age);
- if((len)<10)
- printf("请输入0%d的生日:",len);
- else
- printf("请输入%d的生日:",len);
- scanf("%s",p1->birth);
- if((len)<10)
- printf("请输入0%d的电话:",len);
- else
- printf("请输入%d的电话号:",len);
- scanf("%ld",&p1->tele);
- if((len)<10)
- printf("请输入0%d的地址:",len);
- else
- printf("请输入%d的地址:",len);
- scanf("%s",p1->addr);
- if((len)<10)
- printf("请输入0%d是否为党员:",len);
- else
- printf("请输入%d是否为党员:",len);
- scanf("%s",p1->party);
- head=NULL;
- while(strcmp(p1->num,"0")!=0)
- {
- len++;
- if(head==NULL)
- head=p1=p2;
- else
- p2->next=p1;
- p2=p1;
- p1=(struct student *) malloc(sizeof(struct student));
- if((len)<10)
- printf("请输入0%d的学号:",len);
- else
- printf("请输入%d的学号:",len);
- scanf("%s",p1->num);
- if((len)<10)
- printf("请输入0%d的姓名:",len);
- else
- printf("请输入%d的姓名:",len);
- scanf("%s",p1->name);
- if((len)<10)
- printf("请输入0%d的性别:",len);
- else
- printf("请输入%d的性别:",len);
- scanf("%s",p1->sex);
- ch=getchar();
- if((len)<10)
- printf("请输入0%d的年龄:",len);
- else
- printf("请输入%d的年龄:",len);
- scanf("%d",&p1->age);
- if((len)<10)
- printf("请输入0%d的生日:",len);
- else
- printf("请输入%d的生日:",len);
- scanf("%s",p1->birth);
- if((len)<10)
- printf("请输入0%d的电话:",len);
- else
- printf("请输入%d的电话号:",len);
- scanf("%ld",&p1->tele);
- if((len)<10)
- printf("请输入0%d的地址:",len);
- else
- printf("请输入%d的地址:",len);
- scanf("%s",p1->addr);
- if((len)<10)
- printf("请输入0%d是否为党员:",len);
- else
- printf("请输入%d是否为党员:",len);
- scanf("%s",p1->party);
- }
- p2->next=NULL;
- writetxt(head);
- return (head);
- }
- }
- if(ok=='N'||ok=='n')
- {
- printf("请重新选择/n");
- return NULL;
- }
- else
- {
- printf("/n 文件已经存在/n");
- fp=fopen("d://student.txt","rb");
- p=stud;
- for(i=0;!feof(fp);i++)
- fread(stud+i,sizeof(struct student),1,fp);
- len=i-1;
- printf(" 文件里含有%d条学生信息/n",len);
- printf("/n 是否使用已经存在的学生数据?(Y/N)/n");
- ch=getchar();
- scanf("%c",&ok);
- if(ok=='Y'||ok=='y')
- {
- head=p1=p2=NULL;
- fp=fopen("d://student.txt","rb");
- if(fp==NULL)
- {
- printf("open error/n");
- return NULL;
- }
- else
- {
- printf("学号 姓名 性别 年龄 出生年月 电话号码 地址 是否党员/n");
- for(i=0;i<len;i++)
- {
- p1=(struct student *)malloc(sizeof(struct student));
- fread(p1,sizeof(struct student),1,fp);
- if(head==NULL)
- head=p2=p1;
- else
- p2->next=p1;
- p2=p1;
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- }
- fclose(fp);
- return(head);
- }
- }
- if(ok=='N'||ok=='n')
- {
- len=1;
- p1=p2=( struct student *) malloc(sizeof(struct student ));
- if((len)<10)
- printf("请输入0%d的学号:",len);
- else
- printf("请输入%d的学号:",len);
- scanf("%s",p1->num);
- if((len)<10)
- printf("请输入0%d的姓名:",len);
- else
- printf("请输入%d的姓名:",len);
- scanf("%s",p1->name);
- if((len)<10)
- printf("请输入0%d的性别:",len);
- else
- printf("请输入%d的性别:",len);
- scanf("%s",p1->sex);
- ch=getchar();
- if((len)<10)
- printf("请输入0%d的年龄:",len);
- else
- printf("请输入%d的年龄:",len);
- scanf("%d",&p1->age);
- if((len)<10)
- printf("请输入0%d的生日:",len);
- else
- printf("请输入%d的生日:",len);
- scanf("%s",p1->birth);
- if((len)<10)
- printf("请输入0%d的电话:",len);
- else
- printf("请输入%d的电话号:",len);
- scanf("%ld",&p1->tele);
- if((len)<10)
- printf("请输入0%d的地址:",len);
- else
- printf("请输入%d的地址:",len);
- scanf("%s",p1->addr);
- if((len)<10)
- printf("请输入0%d是否为党员:",len);
- else
- printf("请输入%d是否为党员:",len);
- scanf("%s",p1->party);
- head=NULL;
- while(strcmp(p1->num,"0")!=0)
- {
- if(head==NULL)
- head=p1=p2;
- else
- p2->next=p1;
- p2=p1;
- p1=(struct student *) malloc(sizeof(struct student));
- if((len)<10)
- printf("请输入0%d的学号:",len);
- else
- printf("请输入%d的学号:",len);
- scanf("%s",p1->num);
- if((len)<10)
- printf("请输入0%d的姓名:",len);
- else
- printf("请输入%d的姓名:",len);
- scanf("%s",p1->name);
- if((len)<10)
- printf("请输入0%d的性别:",len);
- else
- printf("请输入%d的性别:",len);
- scanf("%s",p1->sex);
- ch=getchar();
- if((len)<10)
- printf("请输入0%d的年龄:",len);
- else
- printf("请输入%d的年龄:",len);
- scanf("%d",&p1->age);
- if((len)<10)
- printf("请输入0%d的生日:",len);
- else
- printf("请输入%d的生日:",len);
- scanf("%s",p1->birth);
- if((len)<10)
- printf("请输入0%d的电话:",len);
- else
- printf("请输入%d的电话号:",len);
- scanf("%ld",&p1->tele);
- if((len)<10)
- printf("请输入0%d的地址:",len);
- else
- printf("请输入%d的地址:",len);
- scanf("%s",p1->addr);
- if((len)<10)
- printf("请输入0%d是否为党员:",len);
- else
- printf("请输入%d是否为党员:",len);
- scanf("%s",p1->party);
- }
- p2->next=NULL;
- writetxt(head);
- }
- return (head);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- /*学生信息的修改*/
- ////////////////////////////////////////////////////////////////////////////////
- struct student *change(struct student *head)
- {
- struct student *p=head;
- int age,choose,m;
- long tele;
- char num[10];
- char ch,yes,sex[5],birth[20],addr[30],party[10];
- char *p1;
- if(head==NULL)
- {
- printf("原链表为空");
- return NULL;
- }
- else
- {
- while(1)
- {
- printf("请输入学号/n");
- scanf("%s",num);
- p=head;
- while(p!=NULL&&strcmp(p->num,num)!=0)
- {
- p=p->next;
- if(p==NULL)
- {
- printf("该学生不存在/n");
- break;
- }
- if(strcmp(p->name,"0")==0)
- {
- printf("该学生已不存在/n");
- break;
- }
- }
- m=0;
- while(1)
- {
- if(p==NULL)
- break;
- if(strcmp(p->name,"0")==0)
- break;
- printf("请选择1.性别 2.年龄 3.出生日期4.电话 5.家庭住址6.党员/n");
- scanf("%d",&choose);
- if(choose==1)
- {
- printf("请输入新的性别:/n");
- scanf("%s",&sex);
- p1=sex;
- strcpy(p->sex,p1);
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- if(choose==2)
- {
- printf("请输入新的年龄:/n");
- scanf("%d",&age);
- p->age=age;
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- if(choose==3)
- {
- printf("请输入新的出生日期:/n");
- scanf("%s",birth);
- p1=birth;
- strcpy(p->birth,p1);
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- if(choose==4)
- {
- printf("请输入新的电话:/n");
- scanf("%d",&tele);
- p->tele=tele;
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- if(choose==5)
- {
- printf("请输入新的家庭住址:/n");
- scanf("%s",addr);
- p1=addr;
- strcpy(p->addr,p1);
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- if(choose==6)
- {
- printf("请输入'是'或'否':/n");
- scanf("%s",party);
- p1=party;
- strcpy(p->party,p1);
- printf("是否继续修改本学生学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- }
- printf("是否继续修改其他学生Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- }
- writetxt(head);
- p=head;
- while(p!=NULL)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
- p=p->next;
- }
- return head;
- }
- }
- /////////////////////////////////////////////////////////////////////////////////
- /*学生成绩信息的录入*/
- /////////////////////////////////////////////////////////////////////////////////
- struct student *chengji(struct student *head)
- {
- FILE *fp;
- struct student *p1,*p;
- int i;
- float sum=0;
- fp=fopen("d://student1.txt","wb");
- p1=(struct student *)malloc(sizeof(struct student));
- p1=head;
- while(p1!=NULL)
- {
- if(strcmp(p1->name,"0")==0)
- {
- printf("该学生不存在/n");
- p1=p1->next;
- continue;
- }
- printf("请输入学号为%s学生的高数、C语言、英语成绩:/n",p1->num);
- for(i=0;i<M;i++)
- {
- scanf("%f",&p1->score[i]);
- sum+=p1->score[i];
- }
- p1->total=sum;
- sum=0;
- fwrite(p1,sizeof(struct student),1,fp);
- p1=p1->next;
- }
- fclose(fp);
- writetxt(head);
- p=head;
- printf("学号 姓名 性别 年龄 出生年月 电话号码 地址 是否党员/n");
- while(p!=NULL)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
- p=p->next;
- }
- return(head);
- }
- /////////////////////////////////////////////////////////////////////////////////
- /*学生信息的添加*/
- /////////////////////////////////////////////////////////////////////////////////
- struct student *insert(struct student *head)
- {
- char ch,ok;
- struct student *p,*p0,*p1;
- p=p1=head;
- while(1)
- {
- if((len+1)<10)
- printf("您的学号为0%d/n",len+1);
- else
- printf("您的学号为%d/n",len+1);
- p0=(struct student *)malloc(sizeof(struct student));
- len++;
- if((len)<10)
- printf("请输入0%d的学号:",len);
- else
- printf("请输入%d的学号:",len);
- scanf("%s",p0->num);
- if((len)<10)
- printf("请输入0%d的姓名:",len);
- else
- printf("请输入%d的姓名:",len);
- scanf("%s",p0->name);
- if((len)<10)
- printf("请输入0%d的性别:",len);
- else
- printf("请输入%d的性别:",len);
- scanf("%s",p0->sex);
- ch=getchar();
- if((len)<10)
- printf("请输入0%d的年龄:",len);
- else
- printf("请输入%d的年龄:",len);
- scanf("%d",&p0->age);
- if((len)<10)
- printf("请输入0%d的生日:",len);
- else
- printf("请输入%d的生日:",len);
- scanf("%s",p0->birth);
- if((len)<10)
- printf("请输入0%d的电话:",len);
- else
- printf("请输入%d的电话号:",len);
- scanf("%ld",&p0->tele);
- if((len)<10)
- printf("请输入0%d的地址:",len);
- else
- printf("请输入%d的地址:",len);
- scanf("%s",p0->addr);
- if((len)<10)
- printf("请输入0%d是否为党员:",len);
- else
- printf("请输入%d是否为党员:",len);
- scanf("%s",p0->party);
- while(p->next!=NULL)
- p=p->next;
- p->next=p0;
- p0->next=NULL;
- printf("是否继续添加Y/N/n") ;
- ch=getchar();
- scanf("%c",&ok);
- if(ok=='y'||ok=='Y')len++;
- else
- {
- printf("您需要重新进行1的操作来完成该学生信息的注册,谢谢!/n");
- break;
- }
- }
- p=head;
- while(p!=NULL)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
- p=p->next;
- }
- writetxt(head);
- return(head);
- }
- /////////////////////////////////////////////////////////////////////////////////
- /* 恢复误删的学生信息*/
- /////////////////////////////////////////////////////////////////////////////////
- struct student *recover(struct student *head)
- {
- FILE *fp;
- struct student *p1,*p;
- p=p1=(struct student*)malloc(sizeof(struct student));
- char ch;
- char num[10];
- p1=head;
- printf("input the recover number:");
- scanf("%s",num);
- fp=fopen("d://recycle.txt","rb");
- if(fp==NULL)
- {
- printf("回收站为空!/n");
- return NULL;
- }
- else
- {
- printf("是否将回收站的数据还原?Y/N /n");
- ch=getchar();
- ch=getchar();
- if(ch=='n'||ch=='N')
- printf("不需要还原!");
- else
- {
- while(1)
- {
- if(strcmp(p1->num,num)==0)
- break;
- else
- p1=p1->next;
- }
- while(!feof(fp))
- {
- fread(p,sizeof(struct student),1,fp);
- if(strcmp(p1->num,p->num)==0)
- {
- strcpy(p1->name,p->name);
- strcpy(p1->sex,p->sex);
- p1->age=p->age;
- strcpy(p1->birth,p->birth);
- p1->tele=p->tele;
- strcpy(p1->addr,p->addr);
- strcpy(p1->party,p->party);
- printf("dddddddddddddddddddd/n");
- break;
- }
- }
- }
- writetxt(head);
- p=head;
- while(p!=NULL)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
- p=p->next;
- }fclose(fp);
- }
- return head;
- }
- /////////////////////////////////////////////////////////////////////////////////
- /* 学生信息的删除*/
- /////////////////////////////////////////////////////////////////////////////////
- struct student *del(struct student *head)
- {
- FILE *fp;
- struct student *p1,*p2,*p0;
- p1=p2=head;
- char ch;
- char num[10];
- printf("input the delete number:");
- scanf("%s",num);
- if(head==NULL)
- printf("nothing to delete!");
- else
- {
- while(p1!=NULL)
- {
- if(strcmp(p1->num,num)!=0)
- {
- p2=p1;
- p1=p1->next;
- }
- if(strcmp(p1->num,num)==0)
- {
- p0=p1;
- printf("是否永久删除该学生的信息?Y/N /n");
- ch=getchar();
- ch=getchar();
- if(ch=='y'||ch=='Y')
- {
- printf("该学生信息已经成功从磁盘删除!/n");
- if(p1==head)
- {
- p0=p1;
- head=p1->next;
- p1=p2=head;
- p1=p2->next;
- }
- else
- {
- p0=p1;
- p2->next=p1->next;
- p1=p2->next;
- }
- break;
- }
- else
- {
- fp=fopen("d://recycle.txt","ab+");
- if(fp==NULL)
- {
- printf("cannot open the file!");
- return NULL;
- }
- fwrite(p0,sizeof(struct student),1,fp);
- strcpy(p1->name,"0");
- strcpy(p1->sex,"0");
- p1->age=0;
- strcpy(p1->birth,"0");
- p1->tele=0;
- strcpy(p1->addr,"0");
- strcpy(p1->party,"0");
- printf("学生信息已放入回收站!/n");
- fclose(fp);
- printf("如果想恢复刚刚删除的学生信息,请输入'Y'or'y'/n");
- printf("如果不想恢复刚刚删除的学生信息,请输入'N'or'n'/n");
- ch=getchar();
- ch=getchar();
- if(ch=='y'||ch=='Y')
- {
- head=recover(head);
- break;
- }
- if(ch=='n'||ch=='N')
- break ;
- }
- }
- }
- }
- writetxt(head);
- return head;
- }
- /////////////////////////////////////////////////////////////////////////////
- /* 密码修改保存函数*/
- ////////////////////////////////////////////////////////////////////////////
- void write()
- {
- FILE *fp;
- struct secret p;
- int i;
- fp=fopen("d://mima.txt","wb");
- if(fp==NULL)
- {
- printf("cannot open!");
- }
- for(i=0;i<=len;i++)
- {
- p=use[i];
- fwrite(&p,sizeof(struct secret),1,fp);
- }
- fclose(fp);
- }
- ////////////////////////////////////////////////////////////////////////////////
- /*学生信息的查询*/
- ////////////////////////////////////////////////////////////////////////////////
- void research(struct student *head)
- {
- struct student *p1,*p2;
- p1=p2=head;
- int i,j,l=1,k=0;
- char sex[20],party[10],ch,yes;
- int age;
- char num[10],name[20];
- printf("选择:1.模糊查询 2.精确查询:");
- scanf("%d",&i);
- if(i==1)
- {
- while(l==1)
- {
- printf("选择:1.性别 2.年龄 3.是否党员:");
- scanf("%d",&j);
- if(j==1)
- { p1=head;
- printf("输入性别:");
- scanf("%s",sex);
- ch=getchar();
- while(p1!=NULL)
- {
- if(strcmp(p1->sex,sex)==0)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- p1=p1->next;
- continue;
- }
- k++;
- if(k==3)
- printf("该学生不存在!/n");
- p1=p1->next;
- }
- printf("是否继续查询学生其他信息Y/N/n");
- scanf("%c",&yes);
- printf("yes=%c/n",yes);
- if(yes=='N'||yes=='n')
- break;
- if(yes=='Y'||yes=='y')
- k=0;
- }
- if(j==2)
- {
- p1=head;
- printf("输入年龄:");
- scanf("%d",&age);
- while(p1!=NULL)
- {
- if(p1->age==age)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- p1=p1->next;
- continue;
- }
- k++;
- if(k==3)
- printf("该学生不存在!/n");
- p1=p1->next;
- }
- printf("是否继续查询学生其他信息Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- if(yes=='Y'||yes=='y')
- k=0;
- }
- if(j==3)
- {
- p1=head;
- printf("输入是否党员:");
- scanf("%s",party);
- ch=getchar();
- while(p1!=NULL)
- {
- if(strcmp(p1->party,party)==0)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- p1=p1->next;
- continue;
- }
- k++;
- if(k==3)
- printf("该学生不存在!/n");
- p1=p1->next;
- }
- printf("是否继续查询学生其他信息?Y/N/n");
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- if(yes=='Y'||yes=='y')
- k=0;
- }
- }
- }
- if(i==2)
- {
- printf("请选择细查的关键字:1.学生学号 2.学生姓名:");
- scanf("%d",&j);
- if(j==1)
- {
- while(1)
- {
- p1=head;
- printf("输入学生的学号:");
- scanf("%5s",num);
- while(p1!=NULL)
- {
- if(strcmp(p1->num,num)==0)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- p1=p1->next;continue;
- }
- k++;
- if(k==3)
- printf("该学生不存在!/n");
- p1=p1->next;
- }
- printf("是否继续查询其他学生信息?Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- if(yes=='Y'||yes=='y')
- k=0;
- }
- }
- if(j==2)
- {
- while(1)
- {
- p1=head;
- printf("输入学生的名字:");
- scanf("%s",name);
- while(p1!=NULL)
- {
- if(strcmp(p1->name,name)==0)
- {
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
- p1=p1->next;continue;
- }
- k++;
- if(k==3)
- printf("该学生不存在!/n");
- p1=p1->next;
- }
- printf("是否继续查询其他学生信息?Y/N/n");
- ch=getchar();
- scanf("%c",&yes);
- if(yes=='N'||yes=='n')
- break;
- if(yes=='Y'||yes=='y')
- k=0;
- }
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- void research1(char num[])
- {
- int i;
- for(i=0;i<=len;i++)
- if(strcmp(stud[i].num,num)==0)
- printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",stud[i].num,stud[i].name,stud[i].sex,stud[i].age,stud[i].birth,stud[i].tele,stud[i].addr,stud[i].party);
- }
- /////////////////////////////////////////////////////////////////////////////
- /* 密码修改函数-*/
- ////////////////////////////////////////////////////////////////////////////
- void mimacli()
- {
- char use1[30],mima[30],newmima[30],ch;
- int i,j=0;
- printf("输入用户名:/n");
- scanf("%s",use1);
- printf("输入密码:/n");
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- printf("/n");
- for(i=0;i<=len;i++)
- {
- if(strcmp(stud[i].name,"0")==0)
- {
- printf("该学生不存在/n");
- continue;
- }
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
- {
- printf("输入新密码:/n");
- ch=getchar();
- j=0;
- while(1)
- {
- newmima[j]=getch();
- if(newmima[j]==13)
- break;
- putchar('*');
- j++;
- }
- newmima[j]='/0';
- printf("/n");
- strcpy(use[i].code,newmima);
- write();
- for(i=0;i<=len;i++){
- printf("///////////////////////////////////////////////n");
- printf("%s ",use[0].user);
- printf("%s/n",use[0].code);
- printf("///////////////////////////////////////////////n");}
- break;
- }
- if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
- {
- printf("**************************************/n");
- printf(" 4用户名错误 /n");
- printf("***************************************/n");
- break;
- }
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- break;
- }
- }
- }
- /////////////////////////////////////////////////////////////////////////////
- /* 学生信息管理系统的菜单函数-系统函数*/
- ////////////////////////////////////////////////////////////////////////////
- int menu()
- {
- int sn,i,j=0;
- char use1[30];
- char mima[30];
- int m=0;
- printf(" 学生信息管理系统/n");
- printf("=========================================/n");
- printf(" 1.学生信息的整体注册/n");
- printf(" 2.学生信息的修改/n");
- printf(" 3.学生信息的添加/n");
- printf(" 4.学生信息的删除/n");
- printf(" 5.学生成绩信息的录入/n");
- printf(" 6.学生信息的查询/n");
- printf(" 7.访问者密码的修改/n");
- printf(" 8.恢复误删学生信息/n");
- printf(" 0.退出学生信息管理系统/n");
- printf("==========================================/n");
- printf("请选择0-8:/n");
- while(1)
- {
- scanf("%d",&sn);
- if(sn==7)
- for(i=1;i<=len;i++)
- {
- strcpy(use[i].user,stud[i-1].num );
- strcpy(use[i].code,stud[i-1].num );
- }
- if(sn>1&&sn<7||sn==8)
- {
- printf("请输入您的用户名:");
- scanf("%s",use1);
- printf("请输入您的密码:");
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- printf("/n");
- if(sn==6)
- if(strcmp(use1,use[0].user)!=0)
- {
- for(i=0;i<=len;i++)
- {
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
- {
- if(i!=0)
- {
- printf("**************************************/n");
- printf(" 您只能查找您本人的信息 /n");
- printf("***************************************/n");
- research1(use1);
- break;
- }
- }
- if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- while(1)
- {
- m++;
- if(m<3)
- {
- printf("重新输入:/n");
- printf("请输入您的用户名:");
- scanf("%s",use1);
- printf("请输入您的密码:");
- j=0;
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- }
- }
- else
- {
- sn=0;
- break;
- }
- }
- sn=0;
- break;
- }
- if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
- {
- printf("**************************************/n");
- printf(" 3用户名错误 /n");
- printf("***************************************/n");
- sn=0;
- break;
- }
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- while(1)
- {
- m++;
- if(m<3)
- {
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
- {
- printf("**************************************/n");
- printf(" 您没有权限来操作 /n");
- printf("***************************************/n");
- sn=0;
- break;
- }
- printf("重新输入:/n");
- printf("请输入您的用户名:");
- scanf("%s",use1);
- printf("请输入您的密码:");
- j=0;
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- printf("/n");
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- }
- else
- {
- printf("**************************************/n");
- printf(" 欢迎您登陆本系统 /n");
- printf("***************************************/n");
- research1(use1);
- break;
- }
- }
- else
- {
- sn=0;
- break;
- }
- }
- }
- }
- }
- for(i=0;i<=len;i++)
- {
- if(sn==6)
- if(strcmp(use1,use[0].user)!=0)
- {
- sn=0;
- break;
- }
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
- {
- if(i!=0)
- {
- printf("**************************************/n");
- printf(" 您没有权限来操作 /n");
- printf("***************************************/n");
- sn=0;
- break;
- }
- else
- {
- printf("**************************************/n");
- printf(" 欢迎您登陆本系统 /n");
- printf("***************************************/n");
- break;
- }
- }
- if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- while(1)
- {
- m++;
- if(m<3)
- {
- printf("重新输入:/n");
- printf("请输入您的用户名:");
- scanf("%s",use1);
- printf("请输入您的密码:");
- j=0;
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- printf("/n");
- if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- }
- else
- {
- printf("**************************************/n");
- printf(" 欢迎您登陆本系统 /n");
- printf("***************************************/n");
- break;
- }
- }
- else
- {
- sn=0;
- break;
- }
- }
- break;
- }
- if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
- {
- printf("**************************************/n");
- printf(" 用户名错误 /n");
- printf("***************************************/n");
- sn=0;
- break;
- }
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- while(1)
- {
- m++;
- if(m<3)
- {
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
- {
- printf("**************************************/n");
- printf(" 您没有权限来操作 /n");
- printf("***************************************/n");
- sn=0;
- break;
- }
- printf("重新输入:/n");
- printf("请输入您的用户名:");
- scanf("%s",use1);
- printf("请输入您的密码:");
- j=0;
- while(1)
- {
- mima[j]=getch();
- if(mima[j]==13)
- break;
- putchar('*');
- j++;
- }
- mima[j]='/0';
- printf("/n");
- if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
- {
- printf("**************************************/n");
- printf(" 密码错误 /n");
- printf("***************************************/n");
- }
- }
- else
- {
- sn=0;
- break;
- }
- }
- }
- }
- }
- if (sn<0 || sn>8)
- {
- printf("/n/t输入错误,重选0-8/n");
- break;
- }
- else
- break;
- }
- return sn;
- }
- /////////////////////////////////////////////////////////////////////////////////
- /* 学生信息管理系统的主函数--系统函数*/
- /////////////////////////////////////////////////////////////////////////////////
- void main()
- {
- struct student *head;
- int i,j=0;
- while(1)
- {
- switch(menu())
- {
- case 1:
- printf("**************************************/n");
- printf(" 学生信息的整体注册 /n");
- printf("***************************************/n");
- head=create();
- FILE *fp;
- struct secret p;
- fp=fopen("d://mima.txt","rb");
- if(fp==NULL)
- printf("open error/n");
- else
- {
- for(i=0;i<=len;i++)
- {
- fread(&p,sizeof(struct secret),1,fp);
- strcpy(use[i].user,p.user);
- strcpy(use[i].code,p.code);
- }
- fclose(fp);
- }
- break;
- case 2:
- printf("**************************************/n");
- printf("学生信息的修改/n");
- printf("**************************************/n");
- change(head);
- break;
- case 3:
- printf("**************************************/n");
- printf("学生信息的添加/n");
- printf("**************************************/n");
- head=insert(head);
- break;
- case 4:
- printf("**************************************/n");
- printf("学生成绩信息的删除入/n");
- printf("**************************************/n");
- head=del(head);
- break;
- case 5:
- printf("**************************************/n");
- printf("学生成绩信息的录入/n");
- printf("**************************************/n");
- head=chengji(head);
- break;
- case 6:
- printf("**************************************/n");
- printf("学生信息的查询/n");
- printf("**************************************/n");
- research(head);
- break;
- case 7:
- printf("**************************************/n");
- printf("访问者密码的修改/n");
- printf("**************************************/n");
- mimacli();
- break;
- case 8:
- printf("**************************************/n");
- printf("恢复误删信息/n");
- printf("**************************************/n");
- recover(head);
- break;
- case 0:
- printf("**************************************/n");
- printf("退出学生信息管理系统/n");
- printf("**************************************/n");
- printf("The end./n");
- return;
- default: printf("/n选择错误,请重选!/n");
- getchar();
- getchar();
- }
- system("cls");
- }
- }
- 2、用静态链表实现:
- 设计一个学生信息管理系统,链表中每一结点包括:学号、姓名、年龄、性别、出生年月、地址、电话、电子邮件。程序能实现以下功能:
从文件中加载信息
从键盘输入信息显示学生的信息
修改学生的信息
查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
删除链表中指定学号的结点。
添加学生记录
要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果。完整的代码如下:
- #include "stdlib.h"
- #include "string.h"
- typedef struct student
- {
- int id; //学号
- char name[20]; //姓名
- int age; //年龄
- char sex; //性别(f或m)
- char birthday[30]; //出生年月
- char address[20]; //地址
- char phone[15]; //电话
- char email[30]; //email
- struct student *next;
- }student;
- student *head=NULL;
- int length; //链表的长度
- void create()
- {
- student *p1,*p2;
- length=0;
- p1=(student *)malloc(sizeof(student));
- p1->id=-1;
- if(head==NULL)
- head=p1;
- printf("请输入学生的学号、姓名、年龄、性别、出生年月、地址、电话、电子邮箱:/n");
- while(1) //学号为0的时候退出
- {
- p2=(student *)malloc(sizeof(student));
- scanf("%d %s %d %c %s %s %s %s",&p2->id,p2->name,&p2->age,&p2->sex,p2->birthday,p2->address,p2->phone,p2->email); //输入学生信息
- if(p2->id==0)
- {
- printf("链表创建完成!/n");
- break;
- }
- length++; //链表的长度
- p1->next=p2;
- p2->next=NULL;
- p1=p1->next;
- }
- return ;
- }
- void LoadStudentInfoFromFile()
- {
- student *p,*q;
- int c;
- FILE* f;
- f= fopen("input.txt","r");
- if (f == NULL)
- return;
- fseek(f, 0, SEEK_SET);
- p=(student *)malloc(sizeof(student));
- p->next=NULL;
- head=p;
- while(!feof(f))
- {
- c = fgetc(f);
- if (c != -1)
- fseek(f, -1, SEEK_CUR);
- else
- return ;
- q=(student *)malloc(sizeof(student));
- fscanf(f,"%d",&q->id);
- fscanf(f,"%s",q->name);
- fscanf(f,"%d",&q->age);
- fscanf(f,"%c",&q->sex);
- fscanf(f,"%c",&q->sex);
- fscanf(f,"%s",q->birthday);
- fscanf(f,"%s",q->address);
- fscanf(f,"%s",q->phone);
- fscanf(f,"%s",q->email);
- q->next=NULL;
- p->next=q;
- p=p->next;
- length++; //链表的长度
- }
- }
- void ModifyStudentInfo()
- {
- student *p=head->next;
- int num;
- printf("请输入要修改的学生的学号:");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->id==num)
- {
- printf("修改前,学号为%d的学生的信息如下:/n",num);
- printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
- printf("请输入学生的新电话:");
- getchar();
- gets(p->phone);
- printf("请输入学生的新地址:");
- gets(p->address);
- printf("修改后,学号为%d的学生的信息如下:/n",num);
- printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
- return ;
- }
- p=p->next;
- }
- if(p==NULL)
- {
- printf("该学号不存在!/n");
- return ;
- }
- }
- void display()
- {
- student *p=head->next;
- printf("链表中所有的学生信息如下:/n");
- while(p!=NULL)
- {
- printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
- //printf("/n");
- p=p->next;
- }
- return ;
- }
- void search()
- {
- int num,x;
- char name[20];
- student *p=head->next;
- printf("请选择查询的方式:/n");
- printf("1、按学号查询/t 2、按姓名查询/n");
- scanf("%d",&x);
- if(x==1)
- {
- printf("需要查找的学生学号为:");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->id==num)
- {
- printf("学生学号为%d的学生的信息如下:/n",num);
- printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
- return;
- }
- p=p->next;
- }
- if(p==NULL)
- printf("无此记录!/n");
- }
- else if(x==2)
- {
- printf("需要查找的学生姓名为:");
- getchar();
- gets(name);
- //scanf();
- p=head->next;
- while(p!=NULL)
- {
- if(strcmp(p->name,name)==0)
- {
- printf("学生姓名为%s的学生的信息如下:/n",name);
- printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
- return;
- }
- p=p->next;
- }
- if(p==NULL)
- printf("无此记录!/n");
- }
- return ;
- }
- void insert()
- {
- int num,i;
- student *p,*q;
- p=head;
- printf("请输入你要插入位置: ");
- scanf("%d",&num);
- if(num>length)
- {
- printf("找不到要插入的位置/n");
- return ;
- }
- else
- {
- printf("请输入你要插入的学生的信息:/n");
- q=(student *)malloc(sizeof(student));
- scanf("%d %s %d %c %s %s %s %s",&q->id,q->name,&q->age,&q->sex,q->birthday,q->address,q->phone,q->phone);
- while(p!=NULL)
- {
- if(p->id==q->id)
- {
- printf("该学号已经存在,无法插入!/n");
- return ;
- }
- p=p->next;
- }
- p=head;
- for(i=0;i<num;i++)
- p=p->next;
- q->next=p->next;
- p->next=q;
- length++;
- printf("插入成功!/n");
- return ;
- }
- }
- void Delete()
- {
- int num;
- student *p,*q;
- q=head,p=head->next;
- printf("请输入要删除的学生的学号:/n");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->id==num)
- {
- q->next=p->next;
- free(p);
- length--;
- printf("删除成功!/n");
- return ;
- }
- p=p->next;
- q=q->next;
- }
- if(p==NULL)
- {
- printf("找不到要删除的编号!/n");
- return ;
- }
- }
- void menu()
- {
- printf("________________________________________________________________/n");
- printf("| 学生信息管理系统 |/n");
- printf("| 0、 退出系统 |/n");
- printf("| 1、 录入学生信息 |/n");
- printf("| 2、 建立链表 |/n");
- printf("| 3、 显示链表 |/n");
- printf("| 4、 查找链表中的某个元素 |/n");
- printf("| 5、 删除链表中指定学号的结点 |/n");
- printf("| 6、 指定的位置上插入一个新结点 |/n");
- printf("| 7、 修改学生信息 |/n");
- printf("________________________________________________________________/n");
- return ;
- }
- int main(void)
- {
- int a;
- menu();
- while(1)
- {
- printf("请选择相应的功能:");
- scanf("%d",&a);
- switch(a)
- {
- case 0:
- return 0;
- case 1:
- LoadStudentInfoFromFile(); //从文件中加载学生信息
- menu();
- break;
- case 2:
- create(); //从键盘输入学生信息
- menu();
- break;
- case 3:
- if(head)
- {
- display();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!/n");
- menu();
- }
- break;
- case 4:
- if(head)
- {
- search();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!/n");
- menu();
- }
- break;
- case 5:
- if(head)
- {
- Delete();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!/n");
- menu();
- }
- break;
- case 6:
- if(head)
- {
- insert();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!/n");
- menu();
- }
- break;
- case 7:
- if(head)
- {
- ModifyStudentInfo();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!/n");
- menu();
- }
- break;
- default:
- break;
- }
- }
- system("pause");
- return 0;
- }
3、动态链表实现:
1、 建立一个动态链表,链表中每一结点包括:学号、姓名、性别、年龄、成绩。程序能实现以下功能:
建立链表
显示链表
查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
删除链表中指定学号的结点。
在链表中指定的位置插入一个新结点(学号不能和其他结点重复)。
要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果,然后再显示菜单程序,直到按“退出”选项,程序执行结束。完整的代码如下:
- #include "stdio.h"
- #include "stdlib.h"
- typedef struct student
- {
- int id; //学号
- char name[20]; //姓名
- char sex; //性别(f或m)
- int age; //年龄
- int score; //成绩
- struct student *next;
- }student;
- student *head=NULL;
- int length; //链表的长度
- void create()
- {
- student *p1,*p2;
- length=0;
- p1=(student *)malloc(sizeof(student));
- p1->id=-1;
- if(head==NULL)
- head=p1;
- printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n");
- while(1) //学号为0的时候退出
- {
- p2=(student *)malloc(sizeof(student));
- scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息
- if(p2->id==0)
- {
- printf("链表创建完成!\n");
- break;
- }
- length++; //链表的长度
- p1->next=p2;
- p2->next=NULL;
- p1=p1->next;
- }
- return ;
- }
- void display()
- {
- student *p=head->next;
- printf("链表中所有的学生信息如下:\n");
- while(p!=NULL)
- {
- printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);
- p=p->next;
- }
- return ;
- }
- void search()
- {
- int num;
- student *p=head->next;
- printf("需要查找的学生学号为:");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->id==num)
- {
- printf("学号为%d的学生的信息如下:\n",num);
- printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);
- return;
- }
- p=p->next;
- }
- if(p==NULL)
- printf("无此记录!\n");
- return ;
- }
- void insert()
- {
- int num,i;
- student *p,*q;
- p=head;
- printf("请输入你要插入位置: ");
- scanf("%d",&num);
- if(num>length)
- {
- printf("找不到要插入的位置\n");
- return ;
- }
- else
- {
- printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n");
- q=(student *)malloc(sizeof(student));
- scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score);
- while(p!=NULL)
- {
- if(p->id==q->id)
- {
- printf("该学号已经存在,无法插入!\n");
- return ;
- }
- p=p->next;
- }
- p=head;
- for(i=0;i<num;i++)
- p=p->next;
- q->next=p->next;
- p->next=q;
- length++;
- printf("插入成功!\n");
- return ;
- }
- }
- void Delete()
- {
- int num;
- student *p,*q;
- q=head,p=head->next;
- printf("请输入要删除的学生的学号:\n");
- scanf("%d",&num);
- while(p!=NULL)
- {
- if(p->id==num)
- {
- q->next=p->next;
- free(p);
- length--;
- printf("删除成功!\n");
- return ;
- }
- p=p->next;
- q=q->next;
- }
- if(p==NULL)
- {
- printf("找不到要删除的编号!\n");
- return ;
- }
- }
- void menu()
- {
- printf("________________________________________________________________\n");
- printf("| 学生信息管理系统 |\n");
- printf("| 0、 退出系统 |\n");
- printf("| 1、 建立链表 |\n");
- printf("| 2、 显示链表 |\n");
- printf("| 3、 查找链表中的某个元素 |\n");
- printf("| 4、 删除链表中指定学号的结点 |\n");
- printf("| 5、 指定的位置上插入一个新结点 |\n");
- printf("________________________________________________________________\n");
- return ;
- }
- int main(void)
- {
- int a;
- menu();
- while(1)
- {
- printf("请选择相应的功能:");
- scanf("%d",&a);
- switch(a)
- {
- case 0:
- return 0;
- case 1:
- create();
- menu();
- break;
- case 2:
- if(head)
- {
- display();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!\n");
- menu();
- }
- break;
- case 3:
- if(head)
- {
- search();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!\n");
- menu();
- }
- break;
- case 4:
- if(head)
- {
- Delete();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!\n");
- menu();
- }
- break;
- case 5:
- if(head)
- {
- insert();
- menu();
- }
- else
- {
- printf("链表为空,请先建立链表!\n");
- menu();
- }
- break;
- default:
- break;
- }
- }
- system("pause");
- return 0;
- }
#include "stdio.h"#include "stdlib.h"typedef struct student{int id; //学号char name[20]; //姓名char sex; //性别(f或m)int age; //年龄int score; //成绩struct student *next;}student;student *head=NULL;int length; //链表的长度void create(){student *p1,*p2;length=0;p1=(student *)malloc(sizeof(student));p1->id=-1;if(head==NULL)head=p1;printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n");while(1) //学号为0的时候退出{p2=(student *)malloc(sizeof(student));scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息if(p2->id==0){printf("链表创建完成!\n");break;}length++; //链表的长度p1->next=p2;p2->next=NULL;p1=p1->next;}return ;}void display(){student *p=head->next;printf("链表中所有的学生信息如下:\n");while(p!=NULL){printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);p=p->next;}return ;}void search(){int num;student *p=head->next;printf("需要查找的学生学号为:");scanf("%d",&num);while(p!=NULL){if(p->id==num){printf("学号为%d的学生的信息如下:\n",num);printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);return;} p=p->next;}if(p==NULL)printf("无此记录!\n");return ;}void insert(){int num,i;student *p,*q;p=head;printf("请输入你要插入位置: ");scanf("%d",&num);if(num>length){printf("找不到要插入的位置\n");return ;}else{printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n");q=(student *)malloc(sizeof(student));scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score);while(p!=NULL){if(p->id==q->id){printf("该学号已经存在,无法插入!\n");return ;}p=p->next;}p=head;for(i=0;i<num;i++)p=p->next;q->next=p->next;p->next=q;length++;printf("插入成功!\n");return ;}} void Delete(){int num;student *p,*q;q=head,p=head->next;printf("请输入要删除的学生的学号:\n");scanf("%d",&num);while(p!=NULL){if(p->id==num){q->next=p->next;free(p);length--;printf("删除成功!\n");return ;}p=p->next;q=q->next;}if(p==NULL){printf("找不到要删除的编号!\n");return ;}}void menu(){printf("________________________________________________________________\n");printf("| 学生信息管理系统 |\n");printf("| 0、 退出系统 |\n");printf("| 1、 建立链表 |\n");printf("| 2、 显示链表 |\n");printf("| 3、 查找链表中的某个元素 |\n");printf("| 4、 删除链表中指定学号的结点 |\n");printf("| 5、 指定的位置上插入一个新结点 |\n");printf("________________________________________________________________\n");return ;}int main(void){int a;menu();while(1){printf("请选择相应的功能:");scanf("%d",&a);switch(a){case 0:return 0;case 1:create();menu();break;case 2:if(head){display();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 3:if(head){search();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 4:if(head){Delete();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 5:if(head){insert();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;default:break;}}system("pause");return 0;}
程序说明:加入已经加入了4个学生信息head->liuwei->zhanghua->lina->liuxiang,链表的长度为4,插入的时候,输入4,将会在liuxiang的后面插入一个学生信息;输入1,将会在liuwei的后面插入一个学生信息;
- 学生信息管理系统
- 学生学籍信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- 学生成绩信息管理系统
- 学生信息管理系统
- 【学生信息管理系统 总结】
- 学生信息管理系统--毕业论文
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统~~~~~
- 学生信息管理系统
- 学生信息管理系统总结
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- netbeans 学生信息管理系统
- 学生信息管理系统
- 停车场管理系统
- SRM548
- 关于面试薪资
- 本月几天?(switch语句)
- C99 标准对复数类型和复数运算的支持
- 学生信息管理系统
- 靈雲星火創編
- KTV歌曲管理系统
- android 常用弹出框的使用
- GlusteFS:自我修复(Selfheal)源码分析
- linux下su和sudo的区别 (/libtool: arm-linux-gcc command not found )
- 使用Change Tracking实现数据同步
- Win7:如何部署定制的Quicklaunch图标
- uva_10815_Andy's First Dictionary