线性表的链式实现应用----学生信息管理系统
2017-10-11 16:57
148 查看
记录一下,数据结构的作业。
系统的功能菜单
如果有Bug,欢迎指出!
系统的功能菜单
如果有Bug,欢迎指出!
#include<bits/stdc++.h> using namespace std; #define OK 1 #define ERROR 0 typedef int status; typedef struct LNode{ char num[25]; // 学生的学号 char name[25]; // 学生的姓名 double score; // 学生的成绩 // 这里可以添加多个信息,看自己了,我写的简略 LNode *next; }LNode,*LinkList; typedef struct { LinkList L; status init(){ L=new LNode; L->next=NULL; return OK; } status CreatList(int n){ // 创建链表,输入初始的 L=new LNode; L->next=NULL; LNode *p; for(int i=1;i<=n;i++){ p=new LNode; printf("请输入第%d个学生的信息 ",i); scanf("%s %s %lf",p->num,p->name,&p->score); p->next=L->next;L->next=p; } L->score=n; return OK; } status GetLength(){ // 得到链表中学生的个数 return (int)L->score; //// 头结点中的score成员,我是用来存学生个数的。 } status TraverseList(){ // 遍历链表中所有的学生,并显示情况。 if(L->next==NULL) return ERROR; LNode *p;int cnt=1; printf("序号 学 号 姓名 成绩\n") ; for(p=L->next;p;p=p->next) printf("%d %s %s %.3lf\n",cnt++,p->num,p->name,p->score); return OK; } status ListInsert(int pos,LNode *temp){ // 插入 一个学生信息 int cnt=0; LNode *p,*q; for(p=L;p;p=p->next){ if(cnt==pos-1) break; cnt++; } if(!p) return ERROR; temp->next=p->next; p->next=temp; L->score+=1; return OK; } // 下面两个删除函数 是用了函数重载,函数名相同,传进来的参数不同,会走不同的函数。 status ListDelete(int pos){ //按照序号删除学生 int cnt=0; LNode *p,*q; for(p=L;p;p=p->next){ if(cnt==pos-1) break; cnt++; } if(!p) return ERROR; q=p->next; p->next=q->next; L->score-=1; return OK; } status ListDelete(char *str,int kind){ // kind =1 按照姓名来删除,kind=2按照学号来删除 LNode *p,*q; for(p=L;p;q=p,p=p->next){ if(strcmp(p->name,str)==0&&kind==1) break; if(strcmp(p->num,str)==0&&kind==2) break; } if(!p) return ERROR; q->next=p->next; L->score-=1; return OK; } LNode *ListSearch(int pos){// 按照序号查找学生 LNode *p;int cnt=0; for(p=L->next;p;p=p->next){ cnt++; if(cnt==pos) break; } return p; } LNode *ListSearch(char *str,int &pos,int kind){ // kind =1 按照姓名来查找,kind=2按照学号来查找 LNode *p; pos=0; for(p=L->next;p;p=p->next){ pos++; if(strcmp(p->name,str)==0&&kind==1) break; if(strcmp(p->num,str)==0&&kind==2) break; } return p; } }List; int main(){ List stu; puts(" 欢迎使用本管理系统!"); printf("请输入学生人数:"); int n;scanf 12f05 ("%d",&n); puts("请按照格式依次输入学生的信息( 学 号 姓名 成绩):"); stu.CreatList(n); puts("*****学生信息录入成功*****"); int NoEnd=1; while(NoEnd){ puts("\n *********管理菜单*********** " ); puts("A:当前管理的学生人数。 B:显示当前管理的所有学生的信息。"); puts("C:插入某学生信息。 D:删除某学生信息。"); puts("E:查找某位学生的信息。 Q:退出。") ; char op[5]; scanf("%s",op); switch(op[0]){ case 'A':{ printf("当前管理的学生人数为 %d。\n",stu.GetLength()); break; } case 'B':{ status t=stu.TraverseList(); if(t==ERROR) puts("*****当前没有存储学生信息*****"); break; } case 'C':{ int pos; LNode *t=new LNode; printf("请输入将要插入的位置序号:");scanf("%d",&pos); if(stu.GetLength()!=0&&pos>stu.GetLength()) puts("*****您输入的序号有误*****"); else { puts("请输入插入学生的信息:") ; printf("学号:");scanf("%s",t->num); printf("姓名:");scanf("%s",t->name); printf("成绩:");scanf("%lf",&t->score); status tt=stu.ListInsert(pos,t); puts("****插入成功****") ; } break; } case 'D':{ if(stu.GetLength()==0) { puts("*****当前没有存储学生信息,无法删除*****"); break; } int NotEnd=1; while(NotEnd){ NotEnd=0; char pp[5]; puts("请选择删除的方式:") ; printf("A :按照学生序号进行删除 B:按照学生姓名进行删除\n"); printf("C :按照学生学号进行删除 D:返回主菜单\n");scanf("%s",pp); if(pp[0]=='A') { int pos; printf("请输入将要删除的学生的序号:"); scanf("%d",&pos); if(pos<1||pos>stu.GetLength()) puts("*****您输入的序号有误*****"); else { stu.ListDelete(pos); puts("****删除成功****"); } }else if(pp[0]=='B'){ char name[25]; printf("请输入将要删除的学生的姓名:"); scanf("%s",name); status t=stu.ListDelete(name,1); if(!t) puts("*****您输入的姓名有误,无法删除*****"); else puts("****删除成功****"); }else if(pp[0]=='C'){ char num[25]; printf("请输入将要删除的学生的学号:"); scanf("%s",num); status t=stu.ListDelete(num,2); if(!t) puts("*****您输入的学号有误,无法删除*****"); else puts("****删除成功****"); }else if(pp[0]=='D') continue; else { NotEnd=1; puts("****请输入正确的操作命令****"); } } break; } case 'E':{ if(stu.GetLength()==0) { puts("*****当前没有存储学生信息,无法查询*****"); break; } int NotEnd=1; while(NotEnd){ NotEnd=0; char pp[5]; puts("请选择查找的方式:") ; printf("A:按照学生序号进行查找 B:按照学生姓名进行查找\n"); printf("C:按照学生学号进行查找 D:返回主菜单\n"); scanf("%s",pp); if(pp[0]=='A') { int pos; printf("请输入将要查找的学生的序号:"); scanf("%d",&pos); if(pos<1||pos>stu.GetLength()) puts("*****您输入的序号有误*****"); else { LNode *t=stu.ListSearch(pos); puts("查到的信息为:") ; printf("序号 学 号 姓名 成绩\n") ; printf("%d %s %s %.3lf\n",pos,t->num,t->name,t->score); } }else if(pp[0]=='B'){ char name[25]; int pos; printf("请输入将要查找的学生的姓名:"); scanf("%s",name); LNode *t=stu.ListSearch(name,pos,1); if(!t) puts("*****您输入的姓名有误,无法查到*****"); else { puts("查到的信息为:") ; printf("序号 学 号 姓名 成绩\n") ; printf("%d %s %s %.3lf\n",pos,t->num,t->name,t->score); } }else if(pp[0]=='C'){ char num[25]; int pos; printf("请输入将要查找的学生的学号:"); scanf("%s",num); LNode *t=stu.ListSearch(num,pos,2); if(!t) puts("*****您输入的学号有误,无法查到*****"); else { puts("查到的信息为:") ; printf("序号 学 号 姓名 成绩\n") ; printf("%d %s %s %.3lf\n",pos,t->num,t->name,t->score); } }else if(pp[0]=='D') continue; else { NotEnd=1; puts("****请输入正确的操作命令****"); } } break; } case 'Q':{ NoEnd=0; break; } default :{ puts("*****您输入的信操作有误,请输入A-E或Q字符来确定您的操作*****"); break; } } } puts("Bye Bye~ 欢迎下次使用!"); return 0; }
相关文章推荐
- 学生信息管理系统汇编实现
- 学生信息管理系统简单模拟(C语言实现)
- C语言实现一个学生信息管理系统
- 学生信息管理系统应用ios源码iPad版
- C下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!
- 用汇编实现学生信息管理系统
- 使用python实现一个简单的学生信息管理系统
- 使用结构体实现学生信息管理系统
- 学生信息管理系统应用ios源码iPad版
- 学生信息管理系统C实现
- jsp开发学生信息管理系统,实现了基本的增删改查的功能
- c语言实现的学生信息管理系统
- (一个代码学会c语言操作数据库)linux上通过c语言操作数据库实现基本的学生信息管理系统(增、删、查、改‘显示)
- 【学生信息管理系统 2】:无法实现信息的添加
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- 用单链表实现学生信息管理系统
- 高校学生党员信息管理系统的设计及实现
- c++ stl list实现简单的学生信息管理系统
- django开源应用学校信息管理系统,采用django admin模块实现。
- C语言实现学生信息管理系统