C++动态链表实现的简单学生信息管理系统 历程

首先的查找函数check用的是void作为返回值,在后来我发现在删除和修改的时候都会需要遍历一遍链表,所以干脆就直接用了check函数,将其返回值设为BOOL,如果可以找到对应的学籍遍返回true,否则就返回false~

在调试的时候发现总是会有一个错误error: expected unqualified-id before '->' token,总是找不到错误在哪,最后发现是我的linklist链表操作类根本就没有实例化,所以不能调用linklist里面的成员函数,后来在main函数的开始加入了一个linklist X,编译就可以正常的进行了

碰到了一个"."不能用而“->”可以用的情况,于是去查询了相关的知识~~

分清了这个概念,首先->操作符是用于通过指针访问对象的,而.操作符是直接访问对象的。

如以下代码,指针B通过->访问a中的X函数,而类a则直接通过"."访问自己的成员。

class A{
public:
void X(){}; }; int main(){ A a; A *B = A; a.X(); B->X(); }

通过重载->操作符可以将“.”和“->”达到同样的用处,这里就不多说明。

 

 

可以运行了,然后碰到各种错,继续调试

调试完成了,可以实现添加,删除,查找,输出的简单学生信息管理系统,大功告成!

  1 /*
  2     学生成绩管理系统
  3     功能如下:
  4     1.添加学生数据
  5     2.查询学生成绩
  6     3.修改学生成绩
  7     4.删除对应学生成绩
  8 */
  9 
 10 #include<iostream>
 11 #include <string>
 12 #include<iomanip>
 13 #define NULL 0
 14 
 15 using namespace std;
 16 
 17 class StudentData{
 18 public:
 19     string name;
 20     int math,english,lang,chemistry,biology,physics,number;
 21     StudentData *next;
 22     StudentData *pre;
 23     void insertdate(){
 24         cin>>lang>>math>>english>>physics>>chemistry>>biology;
 25     }
 26     void setlang(){cin >> lang;}
 27     void setmath(){cin >> math;}
 28     void setenglish(){cin >> english;}
 29     void setphysics(){cin >> physics;}
 30     void setchemistry(){cin >> chemistry;}
 31     void setbiology(){cin >> biology;}
 32 };
 33 
 34 class linklist{
 35 public:
 36     StudentData *head,*present;
 37     void insert_one();
 38     void delete_data();
 39     void setdata();
 40     bool check();
 41     void creat();
 42     void output();
 43     void setmore();
 44 };
 45 
 46 void linklist::output(){
 47     cout<<"        姓名        学号    语文    数学    英语    物理    化学    生物"<<endl;
 48     present = head;
 49     while(present->next != NULL){
 50         cout<<setw(12)
 51             <<present->name<<setw(12)<<present->number<<setw(8)<<present->lang<<setw(8)<<present->math<<setw(8)<<present->english
 52             <<setw(8)<<present->physics<<setw(8)<<present->chemistry<<setw(8)<<present->biology<<endl;
 53         present = present->next;
 54     }
 55 }
 56 
 57 void linklist::creat(){
 58     present = new StudentData;
 59     head = present;
 60     present->next = NULL;
 61     present->pre = NULL;
 62 }
 63 
 64 void linklist::insert_one(){
 65     present = new StudentData;
 66     head->pre = present;
 67     present->next = head;
 68     head = present;
 69     present->pre = NULL;
 70     cout<<"请输入学生姓名: ";
 71     cin>>present->name;
 72     cout<<"请输入学号:";
 73     cin>>present->number;
 74     cout<<"请一次输入语文,数学,英语,物理,化学,生物各科成绩:"<<endl;   //插入成绩
 75     present->insertdate();        //输入成绩
 76 }
 77 
 78 void linklist::delete_data(){
 79     string studentname;
 80     int sigh = 0;
 81     cout<<"请输入要删除的学生姓名: ";
 82     if (check()) {
 83         cout<<"删除数据成功!"<<endl;
 84         delete present;
 85     }
 86     else cout<<"删除失败。"<<endl;
 87 }
 88 
 89 bool linklist::check(){
 90     present = head;
 91     string thename;
 92     cin>>thename;
 93     while (present->next != NULL)
 94     {
 95         if (thename == present->name){
 96             cout<<"        姓名        学号    语文    数学    英语    物理    化学    生物"<<endl<<setw(12)
 97                 <<present->name<<setw(12)<<present->number<<setw(8)<<present->lang<<setw(8)<<present->math<<setw(8)<<present->english
 98                 <<setw(8)<<present->physics<<setw(8)<<present->chemistry<<setw(8)<<present->biology<<endl;
 99             return true;
100         }
101         else {
102             present = present->next;
103             continue;
104         }
105     }
106     cout<<"查无此人!"<<endl;
107     return false;
108 }
109 
110 void linklist::setdata(){
111     string the_name;
112     int subject;
113     cout<<"请输入学生姓名: ";
114     if (check()){
115         while(1){
116             cout<<"1.语文    2.数学"<<endl
117                 <<"3.英语    4.物理"<<endl
118                 <<"5.化学    6. 生物"<<endl;
119             cout<<"请输入需要修改的科目编号: ";
120             cin >> subject;
121             switch (subject)
122             {
123             case 1:present->setlang();break;
124             case 2:present->setmath();break;
125             case 3:present->setenglish();break;
126             case 4:present->setphysics();break;
127             case 5:present->setchemistry();break;
128             case 6:present->setbiology();break;
129             default: {
130                 cout<<"回到上级菜单。"<<endl;
131                 return;
132             }
133             }
134             cout<<"修改成功!"<<endl;
135         }
136     }
137 }
138 
139 void linklist::setmore(){
140     cout<<"请输入添加学生人数: ";
141     int n;
142     cin>>n;
143     while(n--) insert_one();
144 }
145 
146 int main(){
147     linklist X;
148     cout<<"欢迎来到我的学生信息管理系统,请输入相应序号进行操作:"<<endl
149         <<"输入0退出系统"<<endl
150         <<"1.**********添加学生信息"<<endl<<"2.**********查询学生信息"<<endl
151         <<"3.**********删除学生信息"<<endl<<"4.****将学生信息列表输出"<<endl
152         <<"5.**********修改学生信息"<<endl<<"6.**********批量插入学籍";
153     X.creat();
154     while (true){
155         int choise;
156         cout<<"请输入操作序号: "<<endl;
157         cin>>choise;
158         switch (choise)
159         {
160         case 1:
161             X.insert_one();break;
162         case 2:{
163             cout<<"请输入查询的姓名: ";
164             X.check();
165             break;
166         }
167         case 3:
168             X.delete_data();break;
169         case 4:
170             X.output();break;
171         case 5:
172             X.setdata();break;
173         case 6:
174             X.setmore();break;
175         case 0:
176             break;
177         default:
178             cout<<"对不起,有关功能正在开发!^-^"<<endl;break;
179         }
180         if (!choise) break;
181     }
182 
183     return 0;
184 }

希望有路过的神牛不吝赐教~

posted @ 2014-04-02 13:12  HackingMan  阅读(6628)  评论(2编辑  收藏  举报