数据结构课程设计要点样本.doc
《数据结构课程设计要点样本.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计要点样本.doc(17页珍藏版)》请在咨信网上搜索。
课程设计任务书 —第1学期 电子和信息工程 系 计算机科学和技术 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 库存管理系统 完成期限:自 年 1 月 2日至 年 1 月 6 日共 1 周 设计依据、要求及关键内容(可另加附页): 一、设计目标 熟悉多种数据结构和运算,会使用数据结构基础操作处理部分实际问题。 二、设计要求 (1)重视课程设计步骤,用严谨、科学和扎实工作态度对待课程设计每一项任务; (2)根据课程设计题目要求,独立地完成各项任务,严禁剽窃;凡发觉剽窃,剽窃者和被剽窃者皆以零分计入本课程设计成绩。凡发觉试验汇报或源程序雷同,包含全部人员皆以零分计入本课程设计成绩; (3)学生在接收设计任务后,首先要按设计任务书要求编写设计进程表; (4)认真编写课程设计汇报。 三、设计内容 1)问题描述 试设计一库存管理系统,产品信息包含产品编号、名称、价格、数量等(产品编号不反复)。 2) 基础要求 该系统应含有以下功效: 1、产品信息录入功效(产品信息用文件保留)--输入v 2、产品信息浏览功效 --输出v 3、产品入库 4、产品出库 5、查询和排序功效: l 1)按价格从大到小排序 l 2)按名称查询 6、产品信息删除、修改功效。 四、参考文件 [1]《数据结构》. 王红梅. 清华大学出版社 [2]《数据结构学习教导和试验指导》. 王红梅. 清华大学出版社 [3]《C++程序设计》. 钱能. 清华大学出版社 [4]《C++程序设计试验指导》. 钱能. 清华大学出版社 [5]《C++程序设计》.谭浩强. 清华大学出版社 #include<iostream> #include<string> #include<iomanip> #include<fstream> using namespace std; int count=0; class CData //定义数据基类 { public: CData(){}; virtual int Compare(CData &)=0; virtual void Show()=0; virtual ~CData(){}; }; class CNode //定义结点基类 { private: CData *pData; //用于指向数据类指针 CNode *pNext; //用于指向链表后向指针 public: void InputData(CData *pdata){pData=pdata;} //输入数据 void ShowNode(){pData->Show();} //打印一个节点数据 CData *GetData(){return pData;} friend class CList; //定义链表类为基类 }; class CList { CNode *pHead; //链表头结点指针 public: CList(){pHead=0;}; ~CList(){DeleteList();} void AddNode(CNode *pnode); //在首部添加结点 CNode *DeleteNode(CNode *); //删除一个指定结点,返回该结点指针 CNode *Search(CData &); //查找一个指定数据,返回该数据所在结点在链表指针,未找到返回0 bool IsExist(CData &); void ShowList(); //打印整个链表 void DeleteList(); //删除整个链表 CNode *GetListHead(){return pHead;} //返回链表首结点 CNode *GetListNextNode(CNode *pnode); //返回链表指定结点下一个结点 }; CNode *CList::GetListNextNode(CNode *pnode) //返回链表指定结点下一个结点 { CNode *p1=pnode; return p1->pNext; }; void CList::AddNode(CNode *pnode) //在首部添加结点 { if (pHead==0) //假如是空链表,插入结点是唯一结点 { pHead=pnode; pnode->pNext=0; return; } else //不然,插入到链表首部 { pnode->pNext=pHead; pHead=pnode; } }; CNode *CList::DeleteNode(CNode *pnode) //删除一个指定结点,返回该结点指针 { CNode *p1,*p2; p1=pHead; //指向首结点 while(p1!=pnode&&p1->pNext!=0) //寻求要删除结点 { p2=p1; p1=p1->pNext; //结点p2一直在p1后面 } if (p1==pHead) //假如要删除是首结点 { pHead=pHead->pNext; //将首结点后移 return pnode; } p2->pNext=p1->pNext; //p1指向被删除结点,将p2结点和p1后面结点连接起来 return pnode; } CNode *CList::Search(CData &data) //查找一个指定数据,返回指针,若未找到返回0 { CNode *p1=pHead; while(p1) //从头结点开始查找 { if (p1->pData->Compare(data)==0) return p1; //找到后返回结点指针 p1=p1->pNext; } return 0; //搜索完找不到,返回空指针0 } void CList::ShowList() //打印整个链表 { CNode *p1=pHead; while(p1) { p1->pData->Show(); p1=p1->pNext; } } void CList::DeleteList() //删除整个链表结点 { CNode *p1,*p2; p1=pHead; while(p1) { delete p1->pData; p2=p1; p1=p1->pNext; delete p2; } } class Repository:public CData //库存为统计,为数据基类公有派生类 { private : char szName[20]; //库存中数据:商品名、商品数量和入库时间 unsigned int szNumber; char szTime[20]; char szN; CList ShList; public: Repository(); //结构函数 Repository(char *name,int number,char *time); void SetRecord(char *name, int number,char *time); //输入数据函数 int Compare(CData &); //比较函数,比较商品名 void Show(); void AddRecord(); void Display(); void LookUpRecord(); void DeleteRecord(); void ModifyRecord(); void SaveToFile(); void Operate(string &strChoice); void ReadFromFile(); void Output(); }; Repository::Repository() { strcpy(szName,"\0"); szNumber=0; strcpy(szTime,"\0"); } Repository::Repository(char *name,int number,char *time) { strcpy(szName,name); szNumber=number; strcpy(szTime,time); szN=name[0]; } void Repository::SetRecord(char *name, int number,char *time) //输入数据函数 { strcpy(szName,name); szNumber=number; strcpy(szTime,time); szN=name[0]; } int Repository::Compare(CData &data) //比较商品名 { Repository &temp=(Repository &)data; return strcmp(szName,temp.szName); } void Repository::Show() //打印一个结点数据 { cout<<setw(15)<<szName<<setw(15)<<szNumber<<setw(15)<<szTime<<endl; } void Repository::AddRecord() //将统计添加到链表中 { CNode *pNode; Repository *pSh; char szName[20],szTime[20]; unsigned int szNumber; cout<<"请输入新商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { cout<<"请输入新商品入库时间: "; cin>>szTime; cout<<"请输入新商品数量: "; cin>>szNumber; pSh=new Repository; //生成新数据累对象 pSh->SetRecord(szName,szNumber,szTime); //数据类对象赋值 pNode=new CNode; //生成新结点 pNode->InputData(pSh); //结点插入链表 ShList.AddNode(pNode); count++; cout<<"请输入新商品名(输入0退出,并进入系统菜单) "; cin>>szName; } cout<<endl<<endl; } void Repository::Display() //显示全部链表数据 { cout<<"目前操作共有"<<count<<"条新商品添加纪录。\n\n"; cout<<"现在库存共有商品信息统计是:\n\n"; cout<<setiosflags(ios_base::left)<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl<<endl; ShList.ShowList(); cout<<endl<<endl; system("pause"); system("cls"); } void Repository::LookUpRecord() // 根据商品名查找 { CNode *pLook; char szName[20]; cout<<"请输入您需要查找商品名(输入0退出,并进入系统菜单):"; cin>>szName; while (strcmp(szName,"0")) { Repository sh(szName,0,"0"); //生成结点 pLook=ShList.Search(sh); //查找指定结点数据 if (pLook) { cout<<"在库存商品信息统计中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl; pLook->ShowNode(); } else cout<<"在库存商品信息统计中找不到商品:"<<szName<<"。"<<endl; cout<<"请输入您需要查找商品名(输入0退出,并进入系统菜单):"; cin>>szName; } cout<<endl<<endl; } void Repository::DeleteRecord() //在链表中删除指定结点数据 { CNode *pLook; char szName[20]; cout<<"请输入您需要删除商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //删除时应先查找出结点 { cout<<"在库存商品信息统计中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl; pLook->ShowNode(); cout<<"请确定是否删除此商品信息统计(Y/N)【确定删除请输入Y或y,取消删除请输入N或n】:"; char ok; cin>>ok; if (ok=='Y'||ok=='y') { ShList.DeleteNode(pLook); cout<<szName<<"信息统计删除成功!"<<endl; delete pLook; count--; } else if(ok=='N'||ok=='n') cout<<szName<<"信息统计删除失败!"<<endl; } else cout<<"在库存商品信息统计中找不到商品:"<<szName<<"。"<<endl; cout<<"请输入您需要删除商品名(输入0退出,并进入系统菜单):"; cin>>szName; } cout<<endl<<endl; } void Repository::ModifyRecord() //修改商品统计 { CNode *pLook; Repository *pSh; char szName[20],szTime[20]; unsigned int szNumber; cout<<"请输入您需要修改商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //修改时应先查找出结点 { cout<<"在库存商品信息统计中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl; pLook->ShowNode(); cout<<"-----下面开始修改-----"<<endl<<"请输入修改后商品名: "; cin>>szName; cout<<"请输入修改后商品数量:"; cin>>szNumber; cout<<"请输入修改后商品入库时间: "; cin>>szTime; cout<<"请确定是否修改此统计(Yes (Y) or No(N)):"; char ok; cin>>ok; if (ok=='Y'||ok=='y') { pSh=new Repository; pSh->SetRecord(szName,szNumber,szTime); pLook->InputData(pSh); cout<<szName<<"信息统计修改成功!"<<endl; } else if(ok=='N'||ok=='n') cout<<szName<<"信息统计修改失败!"<<endl; } else cout<<" 在库存商品信息统计中找不到"<<szName<<","<<endl; cout<<" 请输入您需要修改商品名(输入0退出,并进入系统菜单):"; cin>>szName; } } void Repository::Output() { CNode *pLook; Repository *pSh; char szName[20]; unsigned int szNumber; cout<<"请输入您需要出库商品名(输入0退出,并进入系统菜单):"; cin>>szName; while(strcmp(szName,"0")) { Repository sh(szName,0,"0"); pLook=ShList.Search(sh); if (pLook) //修改时应先查找出结点 { pSh=(Repository *)pLook->GetData(); cout<<"在库存商品信息统计中找到商品:"<<szName<<",内容是:"<<endl; cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl; pLook->ShowNode(); if (0==pSh->szNumber) { cout<<"该商品缺货,请立即补充!"<<endl; } else { cout<<"请输入您要取出商品数量:"; cin>>szNumber; cout<<"请确定是否取出该商品( Yes (Y) or No(N) ):"; char ok; cin>>ok; if(ok=='Y'||ok=='y') { if(pSh->szNumber<=szNumber) { cout<<szName<<"您要求商品数量大于仓库中数量,故全部输出"<<pSh->szNumber<<" 个商品"<<endl; pSh->szNumber=0; } else { pSh->szNumber-=szNumber; cout<<szName<<"您已取出 "<<szNumber<<" 个商品"<<endl; } cout<<szName<<"成功取出!"<<endl; } else if(ok=='N'||ok=='n') cout<<szName<<"您取消了该操作"<<endl; } } else cout<<" 在库存商品信息统计中找不到"<<szName<<","<<endl; cout<<" 请输入您需要出库商品名(输入0退出,并进入系统菜单):"; cin>>szName; } } void Repository::SaveToFile() //将链表中数据保留在文件中 { ofstream outfile("repository.dat",ios::binary); if(! outfile) { cout<<"数据文件打开错误,没有将数据存入文件!\n"; return; } CNode *pnode; Repository *pSh; string strName,strNumber; pnode=ShList.GetListHead(); //取出链表首结点指针 while(pnode) { pSh=(Repository *)pnode->GetData(); //返回结点指向数据域指针 outfile.write((char *)pSh,sizeof(Repository)); //将数据域写入文件 pnode=ShList.GetListNextNode(pnode); // 取下一结点指针 } outfile.close(); } void Repository::ReadFromFile() //在程序开始先查找有没有数据文件,找到后读取文件数据 { ifstream infile("repository.dat",ios::binary); if(! infile) { cout<<"没有数据文件,请您先添加!\n\n"; return; } CNode *pNode; Repository *pSh; while(! infile.eof()) { pSh=new Repository; //定义数据域对象 infile.read((char *)pSh,sizeof(Repository)); pNode=new CNode; pNode->InputData(pSh); //数据域对象内容生成结点 ShList.AddNode(pNode); //将结点加入链表 } ShList.DeleteNode(pNode); //因为文件多读一次,所以将首结点删除 infile.close(); } void Repository::Operate(string &strChoice) //依据主菜单选项进行操作 { if (strChoice=="1") AddRecord(); else if (strChoice=="2") Display(); else if (strChoice=="3") LookUpRecord(); else if (strChoice=="4") DeleteRecord(); else if(strChoice=="5") ModifyRecord(); else if(strChoice=="6") Output(); else if (strChoice=="0") SaveToFile(); else cout<<"对不起,您输入有误,请重新输入您选择: "; } void main() { Repository repository; cout<<"*******************************************************************\n\n"; cout<<" 欢迎进入库存管理系统 \n\n"; cout<<"*******************************************************************\n\n"; repository.ReadFromFile(); //从文件中输入数据 string strChoice; //接收主菜单选项 do { cout<<"【欢迎进入系统菜单】:\n\n\n"; cout<<" <1>.添加新商品信息统计\n\n"; cout<<" <2>.显示库存中商品信息统计内容\n\n"; cout<<" <3>.依据商品名查询库存中商品信息统计\n\n"; cout<<" <4>.依据商品名删除库存中商品信息统计\n\n"; cout<<" <5>.依据商品名修改库存中商品信息统计\n\n"; cout<<" <6>.商品出库\n\n"; cout<<" <0>.退出系统\n\n\n"; cout<<"【请输入您选择】:"; cin>>strChoice; system("cls"); repository.Operate(strChoice); }while(strChoice!="0"); cout<<"***********************************************************************\n\n"; cout<<" ------------******欢迎再次使用库存管理系统******---------- \n\n"; cout<<"***********************************************************************\n\n"; system("pause"); }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 要点 样本
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文