课程设计——学生信息管理系统(顺序表 链表)
2016-09-17 18:58
671 查看
实验目的 :
1 、掌握线性表的定义;
2 、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
参考信息 :
Definition of structure student :
typedef struct {
char no[8]; //8 位学号
char name[20]; // 姓名
int price; // 成绩
}Student;
Definition of sequential list:
typedef struct {
Student *elem; // 指向数据元素的基地址
int length; // 线性表的当前长度
}SqList ;
Definition of linked list :
typedef struct LNode{
Student data; // 数据域
struct LNode *next; // 指针域
}LNode,*LinkList;
实验要求 :
(1) 程序要添加适当的注释,程序的书写要采用 缩进格式 。
(2) 程序要具在一定的 健壮性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对 等等。
(3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表 根据姓名进行查找的算法和插入算法的流程图 。
顺序表:
链表:
(之前多次给 p t 分配空间,不需要)
原来不只是删掉那么简单!改了三个小时!
1 、掌握线性表的定义;
2 、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
参考信息 :
Definition of structure student :
typedef struct {
char no[8]; //8 位学号
char name[20]; // 姓名
int price; // 成绩
}Student;
Definition of sequential list:
typedef struct {
Student *elem; // 指向数据元素的基地址
int length; // 线性表的当前长度
}SqList ;
Definition of linked list :
typedef struct LNode{
Student data; // 数据域
struct LNode *next; // 指针域
}LNode,*LinkList;
实验要求 :
(1) 程序要添加适当的注释,程序的书写要采用 缩进格式 。
(2) 程序要具在一定的 健壮性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对 等等。
(3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表 根据姓名进行查找的算法和插入算法的流程图 。
顺序表:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> typedef struct { char num[22]; char name[22]; int grade; }Node; typedef struct { Node *Elem; int Maxsize; //最多人数 }List; void welcome() { puts(" ********欢迎进入学生成绩管理系统********"); puts(" * 请选择操作: *"); puts(" * 1:输入学生数目及信息 *"); puts(" * 2:显示所有学生信息 *"); puts(" * 3:删除指定位置学生信息 *"); puts(" * 4:根据姓名查找学生信息 *"); puts(" * 5:插入学生信息 *"); puts(" * 6:输出指定位置学生成绩 *"); puts(" * 7:输出系统学生人数 *"); puts(" * 8:访问结束 *"); puts("\n"); } int i; void Initlist(int n,List &L) { for(i=1;i<=n;i++) { printf("请输入学号:"); scanf("%s",L.Elem[i].num); printf("请输入学生姓名:"); scanf("%s",L.Elem[i].name); printf("请输入成绩:"); scanf("%d",&L.Elem[i].grade); printf(" \\(^o^)/ 请继续\n"); } printf("输入结束(*^__^*)\n"); } void ListDelete(int n,int pos,List &L) { for(i=pos;i<n;i++) L.Elem[i]=L.Elem[i+1]; } void ListInsert(int n,int pos,List &L) { for(i=n;i>pos+1;i--) L.Elem[i]=L.Elem[i-1]; printf("学号:"); scanf("%s",L.Elem[pos+1].num); printf("姓名:"); scanf("%s",L.Elem[pos+1].name); printf("成绩:"); scanf("%d",&L.Elem[pos+1].grade); } void GetElem(int n,int pos,List L) { if(pos>n) printf("你输入的数太大啦o(≧口≦)o,里面都没有那么多人呢!\n\n请继续选择操作:"); else { printf("学号\t姓名\t成绩 \n"); printf("%s\t%s\t%d\n",L.Elem[pos].num,L.Elem[pos].name,L.Elem[pos].grade); printf("(^-^)V 这就出来啦!\n"); printf("\n请继续选择操作:"); } } int main() { welcome(); List L; L.Maxsize=111; L.Elem=(Node *)malloc(sizeof(Node)*L.Maxsize); int op,pos; // 操作 和 位置 int n=0; char nam[22]; printf("请选择操作(*^-^*)\n"); while(1) { scanf("%d",&op); if(op==8) break; if(op<1||op>8) { printf("此操作有误 ┑( ̄Д  ̄)┍,请重新输入\n\n"); continue; } if((op>1&&op<8)&&n==0) { printf("尚未输入学生信息,请先输入 (⊙﹏⊙)\n\n"); continue; } if(op==1) { printf("**输入学生数目及信息**\n"); printf("请输入学生人数 (0 ~ 100) : "); scanf("%d",&n); while(n>100||n<0) { printf("您输入的人数有误,请重新输入人数\n\n"); scanf("%d",&n); } puts(""); Initlist(n,L); printf("\n请选择操作 : "); continue; } if(op==2) { printf("**显示所有学生信息**\n"); printf("学号\t姓名\t成绩 \n"); for(i=1;i<=n;i++) printf("%s\t%s\t%d\n",L.Elem[i].num,L.Elem[i].name,L.Elem[i].grade); printf("\no(^▽^)o 请选择操作:"); continue; } if(op==3) { printf("**删除指定位置学生信息**\n"); printf("请输入指定位置:"); scanf("%d",&pos); ListDelete(n,pos,L); n--; printf("操作成功\n请选择操作:"); continue; } if(op==4) { printf("**根据姓名查找学生信息**\n"); printf("请输入学生姓名:"); scanf("%s",nam); int flag=0; for(i=1;i<=n;i++) { int A=strcmp(nam,L.Elem[i].name); if(A==0) { printf("学号\t成绩\n"); printf("%s\t%d\n",L.Elem[i].num,L.Elem[i].grade); flag=1; break; } } if(flag) printf("o(* ̄︶ ̄*)o 这就出来啦,继续吧\n\n"); else printf("对不起,查无此人\n\n"); printf("请选择操作:"); continue; } if(op==5) { printf("**插入学生信息**\n"); n++; printf("请输入要插入信息的位置(在此后插入): "); scanf("%d",&pos); ListInsert(n,pos,L); printf("插入成功<( ̄︶ ̄)>\n\n"); printf("请选择操作: ") ; continue; } if(op==6) { printf("**输出指定位置学生成绩**\n"); printf("请输入指定位置:"); scanf("%d",&pos); GetElem(n,pos,L); continue; } if(op==7) { printf("**输出系统学生人数**\n"); printf("系统人数为:%d\n\n请选择操作:",n); } } system("pause"); return 0; };
链表:
(之前多次给 p t 分配空间,不需要)
原来不只是删掉那么简单!改了三个小时!
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define false 0 #define true 1 #define bool int typedef struct Lnode { char num[22]; char name[22]; int grade; struct Lnode *next; }Lnode,*Linklist; void welcome() { puts(" ********欢迎进入学生成绩管理系统********"); puts(" * 请选择操作: *"); puts(" * 1:输入学生数目及信息 *"); puts(" * 2:显示所有学生信息 *"); puts(" * 3:删除指定位置学生信息 *"); puts(" * 4:根据姓名查找学生信息 *"); puts(" * 5:插入学生信息 *"); puts(" * 6:输出指定位置学生成绩 *"); puts(" * 7:输出系统学生人数 *"); puts(" * 8:结束访问 *"); puts("\n"); } int i; void LnodeInit(Linklist &p) { p = (Lnode *)malloc(sizeof(Lnode)); p->next = NULL; } void InitList(int n,Lnode &L,Linklist &p) { for(i=1;i<=n;i++) { LnodeInit(p); printf("请输入学号:"); scanf("%s",p->num); printf("请输入学生姓名:"); scanf("%s",p->name); printf("请输入成绩:"); scanf("%d",&p->grade); Linklist t; t=&L; while(t->next!=NULL) //在 L尾插入 p t=t->next; t->next=p; printf(" \\(^o^)/ 请继续\n"); } } bool ListDelete(int n,int pos,Lnode &L,Linklist &p) { int j=0; Linklist t; t=(Lnode *)malloc(sizeof(Lnode)); p=&L; while(p->next!=NULL&&(j<pos-1)) { p=p->next; j++; } if(!(p->next)||(j>pos-1)) return false; t=p->next; p->next=t->next; free (t); return true; } bool ListInsert(int pos,Lnode &L,Linklist &p) { int j=0; Linklist t; t = (Lnode *)malloc(sizeof(Lnode)); // ??? printf("请输入学号:"); scanf("%s",t->num); printf("请输入学生姓名:"); scanf("%s",t->name); printf("请输入成绩:"); scanf("%d",&t->grade); p=L.next; while(p!=NULL&&(j<pos-1)) { p=p->next; j++; } if(p==NULL||(j>pos-1)) return false; t->next=p->next; p->next=t; return true; } void GetElem(int pos,Lnode L) { int j=1; Linklist t; t=&L; t=t->next; while(t->next&&(j<=pos-1)) { t=t->next; j++; } printf("学号\t\t姓名\t\t成绩\n"); printf("%s\t\t%s\t\t%d\n",t->num,t->name,t->grade); } bool Listesearch(char nam[22],int n,Lnode L,Linklist p) { p=&L; while(p) { if(strcmp(p->name,nam)==0) break; p=p->next; } if(p!=NULL) { printf("学号\t\t成绩\n"); printf("%s\t\t%d\n",p->num,p->grade); return true; } return false; } int main() { welcome(); Lnode L; L.next=NULL; Linklist p; int pos,op,n=0; char nam[22]; bool flag=false; printf("请选择操作(*^-^*): "); while(1) { scanf("%d",&op); if(op==8) break; if(op<1||op>8) { printf("此操作有误 ┑( ̄Д  ̄)┍,请重新输入\n\n"); continue; } if((op>1&&op<8)&&n==0) { printf("尚未输入学生信息,请先输入 (⊙﹏⊙)\n\n"); continue; } if(op==1) { if (flag) { printf("您已经输入学生信息,退出前只可以进行除 1 以外的操作\n"); continue; } flag=true; printf("**输入学生数目及信息**\n"); printf("请输入学生人数 (0 ~ 100) : "); scanf("%d",&n); InitList(n,L,p); printf("输入结束(*^__^*)\n"); printf("\n请选择操作 : "); continue; } if(op==2) { printf("**显示所有学生信息**\n"); printf("学号\t\t姓名\t\t成绩 \n"); Linklist t; t=L.next; while(t!=NULL) { printf("%s\t\t%s\t\t%d\n",t->num,t->name,t->grade); t=t->next; } printf("\no(^▽^)o 请选择操作:"); continue; } if(op==3) { printf("**删除指定位置学生信息**\n"); printf("请输入指定位置:"); scanf("%d",&pos); if(ListDelete(n,pos,L,p)) printf("删除操作成功\n请选择操作:"); else printf("删除位置不合理\n请选择操作:"); n--; continue; } if(op==4) { printf("**根据姓名查找学生信息**\n"); printf("请输入学生姓名:"); scanf("%s",nam); if(Listesearch(nam,n,L,p)) printf("o(* ̄︶ ̄*)o 这就出来啦,继续吧\n\n"); else printf("对不起,查无此人\n"); printf("请选择操作:"); continue; } if(op==5) { printf("**插入学生信息**\n"); n++; printf("请输入要插入信息的位置(1-n)(会在此后插入): "); scanf("%d",&pos); if(ListInsert(pos,L,p)) printf("插入成功<( ̄︶ ̄)>\n\n"); else printf("插入失败\n\n"); printf("请选择操作: ") ; continue; } if(op==6) { printf("**输出指定位置学生成绩**\n"); printf("请输入指定位置:"); scanf("%d",&pos); GetElem(pos,L); continue; } if(op==7) { printf("**输出系统学生人数**\n"); printf("系统人数为:%d\n请选择操作:\n\n",n); } } return 0; }
相关文章推荐
- 数据结构课程设计-学生信息管理系统
- 数据结构课程设计—学生信息管理系统
- 课程设计---学生信息管理系统
- 课程设计-简易学生信息管理系统
- 数据结构课程设计---学生信息管理系统
- C语言学生成绩信息管理系统课程设计报告
- 课程设计: 学生信息管理系统
- 关于c++ 课程设计(学生信息管理系统)
- 课程设计--学生信息管理系统
- 课程设计:学生信息管理系统设计
- C++课程设计:学生信息管理系统
- C语言课程设计之学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计论文--学生信息管理系统
- 数据结构课程设计---学生信息管理系统
- C语言课程设计-学生信息管理系统
- 学生成绩管理系统课程设计(C语言,链表实现)
- 数据结构之链表的实现-------C++课程设计-----学生选课管理系统
- 课程设计--学生信息管理系统
- 学生信息管理系统(cocos2d引擎)——数据结构课程设计