首先的查找函数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 }
希望有路过的神牛不吝赐教~