Node *p;
if(head==NULL)//链表为空的情况 return false;
if(head->id==nid) //删除的为第一个结点的情况 {
head=head->next; return true; }
p=head;
while(p->next) //删除的为第二个及以后结点的情况 {
if((p->next)->id==nid) {
p->next=(p->next)->next; return true; }
p=p->next; }
return false; }
void Link::linkClear() //清空链表 {
head=NULL; }
Node* Link::linkFind(int nid) //查找id值为nid的结点,返回该结点的指针 {
Node *p=head; //没找到符合条件的结点的话,返回的指针值为NULL
while(p) {
if(p->id==nid) break; else
p=p->next; }
return p; }
void Link::linkView() //显示链表数据 {
Node *p=head;
cout< 11 \上传时间\ while(p) { cout< p=p->next; } } Node* Link::getHead() { return head; } //类S,用于包装Link类及菜单操作 class S { private: Link clink;//Link对象成员 bool k;//记录数据是否被修改 public: S(); void SClear(); void SInsert(); void SDelete(); void SFind(); void SModify(); void SView(); void SLoad(); void SSave(); void Exit();//退出程序 void showMenu();//显示菜单 void showMenu1(); void showMenu2(); void showMenu3(); void showTip();//显示操作提示 void doMenu(char n);//执行相应菜单项功能 }; S::S() { Link();//调用成员对象的构造函数 SLoad();//从文件中读取数据,创建链表 k=false;//设置数据被修改 12 } void S::SClear() { clink.linkClear(); cout<<\登陆成功!\} void S::SInsert() //插入记录 { Node *p=new Node(); cout<<\请输入课程编号:\ cin>>p->id; cout<<\请输入课程名称:\ cin>>p->name; cout<<\请输入上传时间:\ cin>>p->outtime; if(!clink.linkFind(p->id)) //判断编号是否存在 { clink.linkInsert(p); k=true; } else cout<<\课程编号为\的课件已存在,上传失败!\} void S::SDelete() //删除课程记录 { int i; if(clink.linkIsEmpty())//链表为空的情况 cout<<\没有课程记录!\ else { cout<<\请输入课程编号:\ cin>>i; if(clink.linkDelete(i)) { cout<<\成功删除编号为\的课程记录!\ k=true; } else cout<<\没有找到编号为\的课程!\ } } 13 void S::SFind() //查找某编号的课程记录 { int n; Node *p; if(clink.linkIsEmpty())//链表为空的情况 cout<<\没有课程记录!\ else { cout<<\请输入要查找课程的编号:\ cin>>n; p=clink.linkFind(n);//获得找到的结点的指针 if(p) //指针值不为NULL时 { cout< cout< } else//指针值为NULL时 cout<<\没有找到编号为\的课程记录!\ } } void S::SModify() //修改某编号的课程信息 { int n; Node *p; if(clink.linkIsEmpty())//链表为空的情况 cout<<\没有课程记录!\ else { cout<<\请输入要修改课程的编号:\ cin>>n; p=clink.linkFind(n);//获得找到的结点的指针 if(p) //指针值不为NULL时 { cout<<\原课程信息为:\ cout< cout< cout<<\请输入新的课程信息\ cout<<\请输入课程编号:\ 14 cin>>p->id; cout<<\请输入课程名称:\ cin>>p->name; cout<<\请上传时间:\ cin>>p->outtime; } else//指针值为NULL时 cout<<\没有找到编号为\的课程记录!\ } } void S::SView() //显示所有的记录 { if(clink.linkIsEmpty()) cout<<\没有课程记录!\ else clink.linkView(); } void S::SLoad() //从文件中读入数据,创建链表 { Node *p; int nid; ifstream infile(\ if(!infile) cerr<<\错误:数据文件不能打开!\\n\ else while(infile>>nid) //读取编号,直到读空 { p=new Node(); p->id=nid; infile>>p->name>>p->num>>p->mark>>p->firm>>p->outtime;//读取汽车信息 clink.linkInsert(p); } infile.close(); //关闭文件 } void S::SSave() //将数据保存到文件 { Node *p=clink.getHead(); ofstream outfile(\ if(!outfile) 15