U盘管理系统数据结构与算法课程设计.docx

上传人:b****1 文档编号:1281899 上传时间:2023-04-30 格式:DOCX 页数:21 大小:268.03KB
下载 相关 举报
U盘管理系统数据结构与算法课程设计.docx_第1页
第1页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第2页
第2页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第3页
第3页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第4页
第4页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第5页
第5页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第6页
第6页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第7页
第7页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第8页
第8页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第9页
第9页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第10页
第10页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第11页
第11页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第12页
第12页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第13页
第13页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第14页
第14页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第15页
第15页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第16页
第16页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第17页
第17页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第18页
第18页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第19页
第19页 / 共21页
U盘管理系统数据结构与算法课程设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

U盘管理系统数据结构与算法课程设计.docx

《U盘管理系统数据结构与算法课程设计.docx》由会员分享,可在线阅读,更多相关《U盘管理系统数据结构与算法课程设计.docx(21页珍藏版)》请在冰点文库上搜索。

U盘管理系统数据结构与算法课程设计.docx

U盘管理系统数据结构与算法课程设计

目录

1需求分析1

1.1任务与分析1

1.2测试数据1

2概要设计2

2.1系统功能模块2

2.2功能介绍2

3详细设计3

3.1 主函数的实现3

3.2功能函数实现4

4调试分析10

4.1调试10

4.2测试10

5用户使用说明16

6测试结果16

结论17

 

摘要

本课题是编写一个U盘管理系统。

将所有U盘信息录入一个二进制文件中,要进行操作时(增、删、改、查),把这些信息读取到顺序栈中,完全在顺序栈内操作,确保原始数据的安全性。

当已确认要对原始数据进行更新操作时,再把栈中的信息录入二进制文件中。

 

关键词:

管理系统;顺序栈;安全性

 

引言

本课题名为U盘管理系统,该系统通过C++编程语言,并借助数据结构中的栈和文件流操作实现。

系统共七个功能,分别实现对U盘信息的录入、显示、查找、删除等。

这个系统大大减小人工管理U盘信息的难度和复杂度,且操作简单易懂,该管理人员带来莫大的好处。

1需求分析

1.1任务与分析

1.实现对U盘信息的录入,并以二进制文件保存。

由于U盘信息非单一数据类型,所以需要借助结构体。

2.实现对U盘信息的读取(从二进制文本中),并将读取的信息存入顺序栈结构体中。

此功能很重要,后面的功能实现都要借助栈来进行。

3.实现对U盘信息的查找,输入要查找的U盘容量进行查找。

不改变栈中的数据。

4.实现对U盘信息的修改,在栈中找出需要修改的U盘,并进行修改。

改变后的信息最终存入文本中。

5.实现对U盘信息的删除,在栈中找出需要删除的U盘,并进行删除。

改变后的信息最终存入文本中。

6.实现对U盘信息的显示,将存入栈中的信息全部显示出来,不改变栈中的数据。

1.2测试数据

1.打开系统直接选择录入,并输入以下信息。

000016金士顿162112

000014金士顿321212

000012金士顿162211

001022台电81212

001011台电322112

000112惠普161222

000114惠普82212

2.读取信息后,查找到所有容量为16G的U盘,输入以下信息。

16

3.修改第二条U盘信息,输入以下信息。

2000018金士顿81212

4.删除所有名字为金士顿,容量为16G的U盘,输入以下信息。

金士顿16

2概要设计

2.1系统功能模块

系统功能图(2-1-1)

2.2功能介绍

1.录入信息:

voidadd()。

初始U盘信息或者中途添加U盘信息,并录入二进制文件。

2.读取信息:

voidread()。

将二进制文件中的所有信息读取到顺序栈中,方便后面的各种操作。

3.显示信息:

voidshow()。

显示所有的U盘信息。

4.修改信息:

voidalter()。

找到要修改的U盘信息,并输入修改后的新信息。

5.删除信息:

voiddel()。

按名字和容量查找到要删除的U盘,进行一条或多条信息的删除。

6.查找信息:

voidfind()。

按容量进行查找。

7.保存信息:

voidsave()。

在修改或删除操作后,确认对信息的更新,将新信息录入二进制文件中。

3详细设计

3.1 主函数的实现

voidmain()//主函数

{

intoption;boolexit=0;

while(!

exit)

{

cout<<"︿﹀︿﹀︿﹀︿﹀︿"<

cout<<"*U盘管理系统*"<

cout<<"﹀︿﹀︿﹀︿﹀︿﹀"<

cout<<"请选择操作:

"<

cout<<"1.录入U盘信息"<

cout<<"2.读取U盘信息"<

cout<<"3.显示U盘信息"<

cout<<"4.修改U盘信息"<

cout<<"5.删除U盘信息"<

cout<<"6.查找U盘信息"<

cout<<"7.保存U盘信息"<

cout<<"8.退出!

"<

cout<<"你的选择:

";

cin>>option;

switch(option)

{

case1:

add();break;

case2:

read();break;

case3:

show();break;

case4:

alter();break;

case5:

del();break;

case6:

find();break;

case7:

save();break;

case8:

exit=1;break;

default:

cout<<"请输入1-7"<

}

if(option!

=8)

{

system("pause");

system("cls");

}

}

}

3.2功能函数实现

1.录入U盘信息功能:

手动输入U盘信息,该功能会将你输入的信息录入名为"udisk.dat"的二进制文本文件中。

voidadd()//录入或添加记录

{

udisku,n;charj,b,m,x;

cout<<"请输入编号:

";

cin>>u.number;

cout<<"请输入名字:

";

cin>>u.name;

cout<<"请输入容量:

";

cin>>u.capacity;

cout<<"请选择接口:

1.usb2.02.usb3.0";

cin>>j;

if(j=='1')strcpy_s(u.inferface,"usb2.0");

elsestrcpy_s(u.inferface,"usb3.0");

cout<<"请选择是否备份:

1.yes2.no";

cin>>b;

if(b=='1')u.back_up='Y';

elseu.back_up='N';

cout<<"请选择是否加密:

1.yes2.no";

cin>>m;

if(m=='1')u.encrypt='Y';

elseu.encrypt='N';

cout<<"请选择是否写保护:

1.yes2.no";

cin>>x;

if(x=='1')u.write_protect='Y';

elseu.write_protect='N';

fstreamoutf;

outf.open("udisk.dat",ios:

:

app|ios:

:

binary);

if(!

outf)

cout<<"打开文件失败!

"<

else

{

outf.write((char*)&u,sizeof(udisk));

outf.close();

ss1.push(u);

cout<<"录入成功!

"<

}

}

2.读取U盘信息功能:

点击此选项,程序会自动将二进制文件"udisk.dat"中的记录压到顺序栈ss1中,并提示读取记录的个数。

voidread()//读取文本信息

{

fstreaminf("udisk.dat",ios:

:

in|ios:

:

binary);

if(!

inf)

cout<<"打开文件失败!

"<

else{

while(!

ss1.isempty())

{

ss1.pop();

}

udisku;

while(!

inf.eof())

{

inf.read((char*)&u,sizeof(udisk));

ss1.push(u);

}

ss1.pop();

inf.close();

cout<<"读取成功,共有"<

}

}

3.显示U盘信息功能:

点击此选项,系统直接将所有的U盘信息显示出来,若无信息,则显示无信息。

voidshow()//显示U盘信息

{

if(ss1.count()==0)cout<<"未读取或无U盘信息!

"<

else

{

inti=0;

cout<<"番号"<

udisku;

while(!

ss1.isempty())

{

u=ss1.pop();

ss2.push(u);

cout<<++i<

}

while(!

ss2.isempty())

{

ss1.push(ss2.pop());

}

}

}

4.修改U盘信息功能:

点击此选项,系统会自动显示出所有的U盘信息,你只需选择要修改的U盘的番号,并输入修改后的信息,修改后需点击保存选项将修改的信息存入二进制文件中。

voidalter()//修改U盘信息

{

if(ss1.count()==0)cout<<"未读取或无U盘信息!

"<

else

{

inta,i=1;udisku;

show();

cout<<"请选择您要修改U盘的番号:

";

cin>>a;

if(a>ss1.count())cout<<"您输入有误!

"<

else

{

while(i

{

ss2.push(ss1.pop());

i++;

}

u=ss1.pop();charj,b,m,x;

cout<<"请输入新编号:

";

cin>>u.number;

cout<<"请输入新名字:

";

cin>>u.name;

cout<<"请输入新容量:

";

cin>>u.capacity;

cout<<"请选择接口:

1.usb2.02.usb3.0";

cin>>j;

if(j=='1')strcpy_s(u.inferface,"usb2.0");

elsestrcpy_s(u.inferface,"usb3.0");

cout<<"请选择是否备份:

1.yes2.no";

cin>>b;

if(b=='1')u.back_up='Y';

elseu.back_up='N';

cout<<"请选择是否加密:

1.yes2.no";

cin>>m;

if(m=='1')u.encrypt='Y';

elseu.encrypt='N';

cout<<"请选择是否写保护:

1.yes2.no";

cin>>x;

if(x=='1')u.write_protect='Y';

elseu.write_protect='N';

ss1.push(u);

while(!

ss2.isempty())

{

ss1.push(ss2.pop());

}

cout<<"修改成功!

"<

}

}

}

5.删除U盘信息功能:

点击此选项,系统会自动显示出所有的U盘信息,你只需选择要删除的U盘的番号,系统会自动删除你选择的信息,删除后需点击保存选项将信息存入二进制文件中。

voiddel()//删除U盘信息

{

if(ss1.count()==0)cout<<"未读取或无U盘信息!

"<

else

{

show();

inti=0;udisku,n;

cout<<"请输入您要删除U盘的名字:

";

cin>>n.name;

cout<<"请输入您要删除U盘的容量:

";

cin>>n.capacity;

while(!

ss1.isempty())

{

u=ss1.pop();

if(!

strcmp(u.name,n.name)&&u.capacity==n.capacity)

{

cout<

i++;

}

else

{

ss2.push(u);

}

}

while(!

ss2.isempty())

{

ss1.push(ss2.pop());

}

if(i)cout<<"成功删除"<

"<

elsecout<<"无此属性的U盘!

"<

}

}

6.查找U盘信息功能:

输入你要查找的U盘的容量,程序后自动输出所有满足要求的信息,若无,则显示未找到。

voidfind()//按容量查找

{

if(ss1.count()==0)cout<<"未读取或无U盘信息!

"<

else

{

intcapa,i=0,j=0;

cout<<"请输入您要查找U盘的容量:

";

cin>>capa;

udisku;

while(!

ss1.isempty())

{

u=ss1.pop();

if(u.capacity==capa)

{

if(j==0)

{

cout<<"编号"<

j++;

}

cout<

i++;

}

ss2.push(u);

}

if(i==0)

cout<<"未找到!

"<

while(!

ss2.isempty())

{

ss1.push(ss2.pop());

}

}

}

4调试分析

4.1调试

对字符串的比较,直接用“==”,导致删除操作无法实现。

最后查阅资料,才发现有strcmp()函数进行比较。

4.2测试

1、打开系统软件,选择录入信息,并依次输入测试信息(如图4-2-1、4-2-2)

(图4-2-1)

(图4-2-2)

2、将信息读取到顺序栈中(如图4-2-3)

(图4-2-3)

3、显示U盘信息(如图4-2-4)

(图4-2-4)

4、按容量大小查找U盘信息(如图4-2-5)

(图4-2-5)

5、点击修改U盘信息,选择要修改的记录,输入修改结果,并保存(如图4-2-6、4-2-7、4-2-8)

(图4-2-6)

(图4-2-7)

(图4-2-8)

6、点击删除U盘信息,选择要删除的记录,并保存(如图4-2-9、4-2-10、4-2-11)

(图4-2-9)

(图4-2-10)

(图4-2-11)

5用户使用说明

启动该管理系统后,根据界面显示的选项选择你所要进行的功能。

若是第一次启动,请先选择录入U盘信息,因为此时文本文件为空,执行其他功能无效。

若非第一次启动,在选择显示、修改、查找、删除功能之前要先选择读取U盘信息,因为尽管文本文件中有记录,但顺序栈为空,而这些功能都是在栈内操作。

当栈内数据有改动(进行过修改或删除操作),要保存改动后的信息,一定要选择保存U盘信息选项,否则文本文件中的记录不会发生改动,修改无效。

6测试结果

 基本功能实现无错,基本能识别不正确的测试数据,并能给出错误输入的提示。

但界面设计不够美观,而且有两个bug未修复,一个就是当输入相同U盘信息时,系统不能识别出来,依然保存在文本中。

之所以存在这个bug,是因为我对字符数组的比较还不够熟悉,不知道怎么实现。

还有一个是,我用的编程软件VC++2013,当将这个管理系统移植到其他版本的软件时会提示错误且不能运行。

 

结论

本次课程设计用C++编写,运用顺序栈存储结构,完成增、删、改、查等功能,并且都能运行成功。

 

致谢

致谢指导老师周立章!

参考文献

[1]杨宝刚.开展企业管理信息化工作的步骤[J].企业管理.2002.(11).12~15

[2]Islamabad.Softwaretoolsforforgerydetection[J].Businessline.2001.(5).29~32

[3][Cline] Marshall P. Cline and Greg A. Lomow, C++ FAQs, Addison-Wesley, 1995  

[4][Eckel] Bruce Eckel, Thinking in C++(C++ 编程思想,刘宗田 等译),机械工业出版社,2000  

[5][Maguire] Steve Maguire, Writing Clean Code(编程精粹,姜静波 等译),电子工业出版社,1993   

[6][Meyers] Scott Meyers, Effective C++, Addison-Wesley, 1992   

[7][Summit] Steve Summit, C Programming FAQs, Addison-Wesley, 1996 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2