考试报名系统是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息组成。
要求:定义一个专用的类型 ElemType,用于描述考生信息,数据结构用一个类描述,命名为List,包括数据、关系和基本操作;数据结构的存储结构分别用顺序和链式两种结构实现,所定义的数据结构在不改或稍加改动的情况下,可用于第二个项目。
单链表:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #define SIZE 1005 using namespace std ; typedef struct Student{ int IdCard ; char name[SIZE] ; char gender[SIZE] ; int age ; char ExamType[SIZE] ; struct Student *next ; }Elemtype; Elemtype *Stu; void MenuChoose(); class List{ public : void InitList(Elemtype *&L) ; void CreatList(Elemtype *L, int n ); void DisplayList(Elemtype *&L); void FindList(Elemtype *&L, int n); void InsertList(Elemtype *&L, int i , Elemtype &e) ; bool DeleteList(Elemtype *&L , int i ,Elemtype &e) ; void AlterList(Elemtype *&L , int i , Elemtype &e); }; void List::InitList(Elemtype *&L) { L = (Elemtype*)malloc(sizeof(Elemtype)); L->next = NULL ; return ; } void List::CreatList(Elemtype *L,int n ) { Elemtype *p, *r ; r = L; for(int i = 0; i < n; i++) { p = (Elemtype*)malloc(sizeof(Elemtype)); printf("请输入第 %d 名学生的学号 ",i+1); cin >> p->IdCard ; printf("请输入第 %d 名学生的姓名 ",i+1); cin >> p->name ; printf("请输入第 %d 名学生的性别 ",i+1); cin >> p->gender ; printf("请输入第 %d 名学生的年龄 ",i+1); cin >> p->age ; printf("请输入第 %d 名学生的报考类型 ",i+1); cin >> p->ExamType ; p->next = NULL ; if(L->next ==NULL) { L->next = p ; } else { r->next = p ; } r = p ; } } void List::InsertList(Elemtype *&L, int i , Elemtype &e) { Elemtype *p = L->next ,*s ; if(i <= 0) return ; int j = 1 ; while(j < i && p!=NULL) { j++ ; p = p->next ; } if(p == NULL) { return ; } else { s = (Elemtype *)malloc(sizeof(Elemtype)); s->IdCard = e.IdCard ; strcpy(s->name,e.name); strcpy(s->gender,e.gender); s->age = e.age ; strcpy(s->ExamType,e.ExamType); s->next = p->next ; p->next = s ; } return ; } void List::AlterList(Elemtype *&L ,int i ,Elemtype &e) { Elemtype *p = L ; int j = 0 ; while(j < i && p!=NULL) { j++ ; p = p->next ; } if(p == NULL) { return ; } p->IdCard = e.IdCard ; strcpy(p->gender,e.gender); strcpy(p->name,e.name); strcpy(p->ExamType,e.ExamType) ; p->age = e.age ; return ; } void List::FindList(Elemtype *&L, int n) { int i = 1; Elemtype *q = L->next; while(i < n && q != NULL) { i++; q = q->next; } if(q == NULL) return ; else { printf("学号 : %d ",q->IdCard); printf("姓名 : %s ",q->name) ; printf("性别 : %s ",q->gender) ; printf("年龄 : %d ",q->age); printf("报考类型 : %s",q->ExamType); printf(" "); } return ; } bool List::DeleteList(Elemtype *&L ,int i ,Elemtype &e) { Elemtype *p = L , *q; int j = 0 ; while(j < i - 1 && p!=NULL) { j++ ; p = p->next ; } if(p ==NULL) { return false ; } else { q = p->next ; if(q==NULL) { return false ; } e.IdCard = q->IdCard ; strcpy(e.name,q->name); strcpy(e.gender,q->gender); strcpy(e.ExamType,q->ExamType) ; e.age = q->age ; p->next = q->next ; free(q); return true ; } } void List::DisplayList(Elemtype *&L) { Elemtype *p = L->next ; int i = 1 ; cout<<endl; while(p) { printf("第 %d 名学生信息 : ",i) ; printf("学号 : %d ",p->IdCard); printf("姓名 : %s ",p->name) ; printf("性别 : %s ",p->gender) ; printf("年龄 : %d ",p->age); printf("报考类型 : %s",p->ExamType); printf(" "); p = p->next ; i++ ; } return ; } void Menu() { cout<<endl<<endl; cout<<"*************************************"<<endl; cout<<"* 学 生 信 息 管 理 报 名 系 统 *"<<endl ; cout<<" 1 输入学生信息 "<<endl; cout<<" 2 查询学生信息 "<<endl; cout<<" 3 修改学生信息 "<<endl; cout<<" 4 删除学生信息 "<<endl; cout<<" 5 插入学生信息 "<<endl; cout<<" 6 输出学生信息 "<<endl; cout<<" 0 退出系统 "<<endl; cout<<"*************************************"<<endl; return ; } void input_Student(Elemtype &e) { printf("请输入学生的学号 "); cin >> e.IdCard ; printf("请输入学生的姓名 "); cin >> e.name ; printf("请输入学生的性别 "); cin >> e.gender ; printf("请输入学生的年龄 "); cin >> e.age ; printf("请输入学生的报考类型 "); cin >> e.ExamType ; cout<<endl; e.next = NULL ; return ; } int main() { Menu(); List a ; int n ; Elemtype e ; a.InitList(Stu); int i ; int num ; printf("功能选择 : "); while(scanf("%d",&n) && n) { if(n==1) { printf("你需要输入多少学生 "); cin >> num ; a.CreatList(Stu,num); } else if(n==2) { printf("你要查找第几个学生 "); cin >> num; a.FindList(Stu,num); } else if(n==3) { printf("你要修改第几名学生信息 :"); cin >> i; printf("请输入修改后的信息 "); input_Student(e); a.AlterList(Stu,i,e); } else if(n==4) { printf("你要删除第几名学生信息 :"); cin >> i; a.DeleteList(Stu,i,e); } else if(n==5) { printf("你要在第几个序号后插入 :"); cin >> i; printf("请输入插入学生的信息 "); input_Student(e); a.InsertList(Stu,i,e); } else if(n==6) { a.DisplayList(Stu); cout<<endl; } else { cout<<"ERROR"<<endl; } Menu(); printf("功能选择 : "); } return 0 ; }
顺序表
#include<cstdio> #include<cstdlib> #include<iostream> #include<cstring> #define MaxSize 100 #define SIZE 100 using namespace std; typedef struct Student{ // 考生信息; int IdCard ; char name[SIZE] ; char gender[SIZE] ; int age ; char ExamType[SIZE] ; }ElemType; typedef struct { ElemType data[MaxSize]; int length; }SqList; SqList *Stu; class list{ public : void InitList(SqList *&L) ; // 初始化 void CreatList(SqList *&L, ElemType a[], int n);// 创建学生信息; void DispList(SqList *L);// 输出学生信息; void FindList(SqList *L, int n); bool ListEmpty(SqList *L); bool ListInsert(SqList *&L, int i, ElemType e); bool ListDelete(SqList *&L, int i, ElemType &e); bool AlterList(SqList *L, int i, ElemType &e); // 修改 第i位置上的学生信息 ; }; void list::InitList(SqList *&L) { L = (SqList *)malloc(sizeof(SqList)); L->length = 0; } bool list::ListEmpty(SqList *L) { return (L->length == 0); } void list::FindList(SqList *L, int n) { if(n < 1 || n > L->length) return ; printf("第 %d 名学生信息 : ", n - 1) ; printf("学号: %d ", L->data[n - 1].IdCard); printf("姓名: %s ", L->data[n - 1].name); printf("性别: %s ", L->data[n - 1].gender); printf("年龄: %d ", L->data[n - 1].age); printf("报考类型: %s ", L->data[n - 1].ExamType); } void list::DispList(SqList *L) { int i; if(ListEmpty(L)) return ; for(i = 0; i < L->length; ++i) { printf("第 %d 名学生信息 : ", i + 1) ; printf("学号: %d ", L->data[i].IdCard); printf("姓名: %s ", L->data[i].name); printf("性别: %s ", L->data[i].gender); printf("年龄: %d ", L->data[i].age); printf("报考类型: %s ", L->data[i].ExamType); } printf(" "); } bool list::AlterList(SqList *L, int i, ElemType &e) { if(i<1 || i>L->length) return false ; L->data[i - 1].age = e.age ; strcpy(L->data[i - 1].ExamType,e.ExamType) ; L->data[i - 1].IdCard = e.IdCard ; strcpy(L->data[i - 1].gender,e.gender ) ; strcpy(L->data[i - 1].name,e.name) ; return true ; } bool list::ListInsert(SqList *&L, int i, ElemType e) { int j; if(i < 1 || i > L->length + 1) return false; i--; //将逻辑序号转化为物理序号 for(j = L->length - 1; j >= i; j--) //注意边界条件 { L->data[j + 1] = L->data[j]; } L->data[i] = e; L->length++; //注意!!!!!! return true; } bool list::ListDelete(SqList *&L, int i, ElemType &e) { int j; if(i < 1 || i > L->length) return false; i--; e = L->data[i]; for(j = i; j < L->length - 1; j++) //注意边界条件 { L->data[j] = L->data[j + 1]; } L->length--; return true; } void list::CreatList(SqList *&L, ElemType a[], int n) { L = (SqList *)malloc(sizeof(SqList)); for(int i = 0; i < n; ++i) { L->data[i] = a[i]; } L->length = n; } void input_Student(ElemType &e) { printf("请输入学生的学号 "); cin >> e.IdCard ; printf("请输入学生的姓名 "); cin >> e.name ; printf("请输入学生的性别 "); cin >> e.gender ; printf("请输入学生的年龄 "); cin >> e.age ; printf("请输入学生的报考类型 "); cin >> e.ExamType ; cout<<endl; return ; } void Menu() { cout<<endl<<endl; cout<<"*************************************"<<endl; cout<<"* 学 生 信 息 管 理 报 名 系 统 *"<<endl ; cout<<" 1 输入学生信息 "<<endl; cout<<" 2 查找学生信息 "<<endl; cout<<" 3 修改学生信息 "<<endl; cout<<" 4 删除学生信息 "<<endl; cout<<" 5 插入学生信息 "<<endl; cout<<" 6 输出学生信息 "<<endl; cout<<" 0 退出系统 "<<endl; cout<<"*************************************"<<endl; return ; } int main() { Menu(); list a; int n ; ElemType e ; ElemType stu[SIZE] ; a.InitList(Stu); int i ; int num ; printf("功能选择 : "); while(scanf("%d",&n) && n) { if(n==1) { printf("你需要输入多少学生 "); cin >> num ; for(int i = 0 ; i<num ;i++) { printf("请输入学生的学号 "); cin >> stu[i].IdCard ; printf("请输入学生的姓名 "); cin >> stu[i].name ; printf("请输入学生的性别 "); cin >> stu[i].gender ; printf("请输入学生的年龄 "); cin >> stu[i].age ; printf("请输入学生的报考类型 "); cin >> stu[i].ExamType ; } a.CreatList(Stu,stu,num); } else if(n==2) { printf("你要查询第几名学生的信息: "); cin >> n; a.FindList(Stu,n); } else if(n==3) { printf("你要修改第几名学生信息 :"); scanf("%d",&i); printf("请输入修改后的信息 "); input_Student(e); a.AlterList(Stu,i,e); } else if(n==4) { printf("你要删除第几名学生信息 :"); scanf("%d",&i); a.ListDelete(Stu,i,e); } else if(n==5) { printf("你要在第几个序号后插入 :"); scanf("%d",&i); printf("请输入插入学生的信息 "); input_Student(e); a.ListInsert(Stu,i,e); } else if(n==6) { a.DispList(Stu); cout<<endl; } else { cout<<"ERORR"<<endl; } Menu(); printf("功能选择 : "); } return 0 ; }