《大作业实验报告03》由会员分享,可在线阅读,更多相关《大作业实验报告03(14页珍藏版)》请在金锄头文库上搜索。
1、湖南科技大学计算机学院湖南科技大学计算机学院 C 语言课程大作业报告语言课程大作业报告题目一:题目一:“狼追兔子狼追兔子”问题问题题目二:重要数据管理程序题目二:重要数据管理程序学生姓名:曾召帅学生姓名:曾召帅学学 号:号:0805010105班班 级:计算机一班级:计算机一班指导老师:黄力指导老师:黄力日日 期:期:2009-6-262题目一:题目一:“狼追兔子狼追兔子”问题问题1 1需求分析需求分析这是来自数学上的一个趣味题,该问题由来已久,数学上也有很多种解法,今天我们用计算机来解决。1.1问题提出问题提出一只兔子躲进了 10 个环形分布的洞的某一个中,狼在第一个洞没有找 到兔子,就隔一
2、个洞,到第三个洞去找,也没有找到,就隔两个洞,到第六 个洞去找,以后每次多一个洞去找兔子.这样下去,如果一直找不到兔子, 请问兔子可能在哪个洞中?给出算法步骤,并编程求出结果。 1.2 本系统涉及的知识点本系统涉及的知识点 数组、循环 1.3 功能要求功能要求1)能解决题目中的问题2)具有通用性2 总体设计总体设计2.1功能设计功能设计利用 for 实现循环结构for(;)3详细设计详细设计 先定义一个变量 N 为猴子数,以实现通用性;再定义一个数组 a,并 赋值全为 0.然后在 for 循环结构,题目要求下狼找兔子,狼所到洞子标记 为 1.循环足够多次数,输出洞子值仍为 0 的洞子编号,则为
3、题目的结果。 4编码与调试编码与调试 调试过程中无大的问题,主要是语法错误,调试过程中已改正。 5测试测试 当洞子数为 10 时,兔子可能在第 2,4,7,9 个洞中。 当洞子数为 15 时,兔子可能在第 2,4,5,7,8,9,11,12,14 个洞中。测试结果符合预期,可以确定程序正确无误。 6用户手册用户手册先运行 Vsiual C+,然后直接点击程序运行即可。3题目二:重要数据管理程序题目二:重要数据管理程序1 需求分析需求分析现在我们进入了一个信息时代,数据是多么的重要。然而我们该怎样保 护我们的重要数据,特别是银行账号,密码。重要数据管理程序,也就应 运而生。 1.1 问题提出问题
4、提出1)程序执行时,首先要进行密码检测,以不让非法用户使用本程序。标准密码预先在程序中设定,程序运行时,若用户的输入密码和标准密码相同,则 显示“口令正确!”并转去执行后续程序;若不相等,重新输入,3 次都不 相等则显示“您是非法用户!”并终止程序的执行。 2)2)将自己需要保护的数据加密后存入指定的文件中。 , 3)3)需要保护的数据信息包括编号,帐号位置,帐号描述,帐号名,密码等, 如:编号帐号位置帐号描 述帐号名密码1http:/www.hnust .cn科大邮 箱dsxianghnust.edu.c n12345 62http:/mail.hn16 手机邮 箱xiangdeshengh
5、n165 .com65432 1 4)4)对指定文件中的信息要能进行添加、删除和明文显示。 1.2 本系统涉及的知识点本系统涉及的知识点数组、指针、结构体、文件 1.3 功能要求功能要求 a)开始运行程序时要进行密码验证(可参考学过的密码验证程序) b)系统以菜单方式工作 c)待保护数据的录入功能(用文件保存)输入。要求通过全命令行给 出文件名,设程序可执行名为 jiami.exe,保存数据的文件起名为 my.dat,则 要在 DOS 窗口输入命令 jiami my.dat(也可在 VC6 中设置程序参数为 my.dat) 。若文件 my.dat 已经存在,则在该文件中追加数据,如果不存在,
6、则新建。 (对于命令行方式编程在平时试验中很多同学没弄明白,希望借这 个作业搞清楚) d)保护数据的明文浏览功能输出 e)保护数据的查询功能算法 f)保护数据的删除、修改功能算法2 总体设计总体设计2.1 功能设计功能设计 本系统需要实现的功能:1)利用 switch 语句设计“主菜单”: 4*主菜单* 请输入选项编号(16)0. 初始化; 1. 输入; 2. 浏览; 3. 查询;4. 密码加密;5. 插入;,6. 删除;7. 退出。* 2)确定各模块函数名称,设计数据存储方式。 a) 菜单函数 menu( ):打开主菜单,供选择。 b) 输入函数 creat( ):创建一个文件,利用循环输入
7、的方式,将有关 信息存入结构数组,结构数组根据信息,采用动态方式建立链结数 据。再将此链表以数据块方式写入创建的文件中。 c) 浏览函数 liulan( ):打开文件,将指针指向文件首,将指针依次 后移,依次输出文件中的内容。 d) 查询函数 search( ):输入要查询的账号,打开文件,用 strcmp 函 数和链表得到要查询的结果。 e) 加密函数 protect( ):打开文件,用指针指向密码,将密码的 ASCII 值加二,这样就对密码加了密。 f) 插入函数 insert( ):打开文件,用链表和指针输入,然后在存入 文件。 g) 删除函数 delet():打开文件,输入想要删除的账
8、号,用 strcmp 函数和链表结构得到要删除的结果。2.22.2 模块图模块图主模块显示主菜 单输入信息浏览信息加密功能查询功能插入功能删除功能3 3 详细设计详细设计3.13.1 模块功能说明:模块功能说明:3.1.13.1.1 输入模块输入模块 1)函数原形:data *creat(data *head)。 2)功 能:利用 for 循环语句和 scanf 函数完成对结构数组的输入,存放 n5个邮箱账号的信息(标号、邮箱地址、邮箱描述、账号名、邮箱密码) 。3)说明:执行完输入函数后,将信息写入文件中,并保存在文件中。 3.1.2 浏览模块浏览模块1)函数原形:data *liulan(
9、) 。2)功能:将存入文件的信息以明文的形式在显示器上输出。3) 说明:执行完浏览函数后,要关闭文件,确保数据信息的不丢失。 3.1.3 加密模块加密模块 1)函数原形:data *protect()。 2)功能:利用将将密码的 ASCII 值加二,保护密码不以明文显示。 3)说明:依然要从文件中打开。 3.1.4 查询模块查询模块 1)函数原形:void search()。 2)功能:将所需邮箱的账号查询出来。 3)说明:从文件中打开,查找。 3.1.5 插入模块插入模块 1)函数原形:data *insert(data *head)。 2)功能:在文件中增添新的信息。 3) 说明:从文件中
10、打开,插入。 3.1.6 删除模块删除模块 1)函数原形:data *delet() 2)功能:将文件中的指定的信息删除。 3)说明:要从文件中打开,删除。 3.23.2 部分模块的算法流程图部分模块的算法流程图 浏览模块的算法流程图:FILE*fp,data*p=NULL,*p=NULL,*head=NULLfp=open(“test.txt“,“r+“)=NULLYes NoP=(data*)malloc(sizeof(data),head=p读文件NoYes显示文件信息无 限 循 环退出本循 环q=p,p=p-nextq-next=NULL,fclose(fp)退 出return hea
11、d4 4 编码与调试编码与调试编码和调试时,出现了许多的逻辑错误,有的根本就不知道怎么去编码, 我通过问老师,看书,一点一点的去摸索,对于逻辑错误,我通过把一段程6序注释掉,来找出哪一部分出现了逻辑错误,然后改正,就这样,我完成了 本题目的程序。5 5 测试测试通过对输入的信息中编号,邮箱地址,邮箱描述,邮箱名,邮箱密码的 不同赋值,来对本程序进行浏览,查询,加密,插入,删除功能的验证,证 明各功能都能运行出来。6 6 结束语结束语在这两周的时间里,谢谢黄老师的谆谆教导,让我学到了许多课堂学不到 的东西。让我知道了自己的很多不足,以前还自认为自己学得不错,以为弄 懂了就行了,其实不然,学会运用
12、所学的才是硬道理。我在运用指针,链表, 文件等诸多方面存在不足,今后一定得在这几个方面加强。附录:全部源程序(vc 6.0 测试通过)题目一题目一 “狼追兔子狼追兔子”问题问题 #include #define N 10 main() int aN,i,j,k,s=0; for(i=0;i #define N 5main()int i,flag,sum,s;for(sum=6;sum #include #include #define N 50 typedef struct z int num; char mail50; char de50; char name50; char pwd50;
13、struct z *next;8data; int count=0; int menu() /*菜单模块*/ char *cmenu; cmenu=“* MENU *n“, “0. 初始化;n“, “1. 输入;n“, “2. 浏览;n“, “3. 查询;n“,“ 4. 密码加密;n“, “5. 插入;n“, “6. 删除;n“, “7. 退出。n“, “*n“; int i,a; char b3; for(i=0;i8); return a; int password() char a10; char b=“123456“;int k=0,i;for(i=0;inum); printf(“请
14、输入邮箱位置:“); scanf(“%s“,p1-mail); printf(“请输入邮箱描述:“); scanf(“%s“,p1-de); printf(“请输入账号名:“); scanf(“%s“,p1-name); printf(“请输入密码:“); scanf(“%s“,p1-pwd); p1-next=NULL; if(head=NULL) head=p1; else p2-next=p1; p2=p1;scanf(“%c“, printf(“要继续输入下个人的吗?(y/n):“); scanf(“%c“, while(s=y); if(fp=fopen(“test.txt“,“a“
15、)=NULL) printf(“出错了!“); exit(1); p=head; while(p!=NULL) fwrite(p,sizeof(data),1,fp); p=p-next;10 fclose(fp); return head; data *liulan() data *p=NULL,*q=NULL,*head=NULL; FILE *fp; if(fp=fopen(“test.txt“,“r+“)=NULL) printf(“出错了!“); exit(1); p=(data *)malloc(sizeof(data); head=p; for(;) if(fread(p,sizeof(data),1,fp)!=1) break; printf(“标号:%dn“,p-num); printf(“邮箱位置:%sn“,p-mail); printf(“邮箱描述:%sn“,p-de); printf(“邮箱地址:%sn“,p-name); printf(“邮箱密码: %sn“,p-name); p-next=(data *)malloc(size