实验大作业题目 智能趣味电子通讯录 类型 信息管理系统
学生姓名 郭茁宁 班 号 1837101 学 号 1183710109
所在院系 计算机学院 学 期 2018年秋季学期 任课教师 苏小红
实验类型 综合设计型
实验目的:
掌握程序设计的基本算法和简单数据结构基础,能够综合运用基本控制语句、算法和数据结构,以及自顶向下、逐步求精的模块化设计方法,能够设计具有一定规模的系统级C语言程序,提高系统编程能力;
针对计算相关的复杂工程问题,能够使用恰当的算法和数据结构,完成计算、统计、排序、检索、匹配等相关的软件系统的构造、测试与实现;
掌握常用的程序调试和测试方法。
实验要求:
采用自顶向下、逐步求精的模块化设计思想设计一个小型信息库管理系统,或者闯关式游戏程序。
要求解释说明采用了什么数据结构和算法,为什么选择这种数据结构或算法,系统实现过程中遇到了哪些问题,这些问题是如何解决的,还有什么问题尚未解决,今后打算从哪几个方面进行改进,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会;
编写程序完成以下实验大作业内容并完成实验大作业反思报告。
实验内容:
用复杂的静态数据结构(结构体数组)保存联系人的姓名、手机号、办公电话、工作单位、所在城市等信息。
typedef struct Adress_List
{
char Name[20];//姓名
char City[20];//城市
char Number[20];//电话号码
int Dial_Time;//通话时间
int Close_Score;//亲密度
}AL;
LoginName : gzn
Password : 123
要求使用模块化程序设计方法设计各个子模块,例如:显示主菜单模块,添加联系人模块,删除联系人模块,修改联系人模块,显示通讯录模块、统计分析和分类模块,通讯录文件读取模块、通讯录存档模块等。能够对多种类型信息进行统计分析和分类,以及查找。例如,按所在单位查找联系人模块,按所在城市对联系人进行分类,按所在工作单位对联系人进行分类等。
请选择功能:
0. 退出系统
输入设计:
功能选择中,有效应对用户输入错误格式的问题,保证了运行流畅和程序健壮性。存储联系人时,统一规定为英文格式,对于信息有较强的包容性,将字母小写化,高效应对查找时不匹配。
输出类型:
输出设计:
每次输出暂停程序,供用户仔细查看结果。打印联系人按后对齐输出,提升用户直观体验。可选择打印至指定文件,供用户存储和查看。标记输出结果的实际意义,提高使用可读性。
系统设计与实现:
系统功能模块划分
对系统进行自顶向下的模块分解,画出系统各个功能模块之间的结构图如下:
函数功能和外部接口设计
本系统总计设计了17个函数,每个函数的功能和接口设计如下表所示:
序号 函数名 函数功能 函数参数 函数返回值
1 Main 功能选择 无 0
2 Login 登陆账户密码 无 无
3 Menu 显示功能菜单 无 无
4 Initial 创建初始链表 无 无
5 Insert 插入新结点 结点p 无
6 Standardize 字母标准化 字符串str[] 无
7 Add 添加新联系人 无 无
8 Delete 删除联系人 无 无
9 Edit 编辑联系人 无 无
10 PrintAll 打印通讯录 无 无
11 Dial 拨打电话 无 无
12 Fuzzy_Match (模糊)匹配查找 无 无
13 FM_Name 姓名(模糊)匹配 无 无
14 FM_City 城市(模糊)匹配 无 无
15 FM_Number 电话(模糊)匹配 无 无
16 Sort_Close 亲密度排序 无 无
17 Acquaintance_Possibility 相识概率 无 无
各个函数之间的调用关系如下所示:
算法
递归法创建、删除、查询链表(使用了递归算法)
选择排序(字典序、亲密度降序)(常用的排序和查找算法)
字母小写化
字符串模糊匹配(模糊匹配算法,或高效的模式匹配算法)
多信息分类查找(分类统计算法)
文件打印(文件操作)
数据结构
递归式动态链表
并查集
程序主流程图
系统总体流程图如下:
实验过程中遇到的问题及解决方法与思路:
问题1: 概率学公式的植入
原因:对函数不了解
解决方法:查阅论文
问题2:防御输入格式错误
原因:提升健壮性
解决方法:判断字符输入合法性
问题3:链表排序
原因:无法调用sort()函数
解决方法:自己编写以姓名等为关键字的选择排序
问题4:用户输入错误功能选项无法返回
原因:程序希望完成该功能
解决方法:设置标记返回上一级
问题5:功能使用多次后屏幕繁冗,不易查看功能菜单
原因:连续使用功能,输入增多,光标下滑
解决方法:每次完成功能后清屏重新打印菜单
测试用例和系统测试结果:
程序的全部源代码:
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #include <windows.h>
5. #include <time.h>
6. #include <math.h>
7.
8. typedef struct Adress_List//存储信息结构体
9. {
10. char Name[20];//姓名
11. char City[20];//城市
12. char Number[20];//电话号码
13. int Dial_Time;//通话时间
14. int Close_Score;//亲密度
15. }AL;
16.
17. typedef struct LL//链表结构
18. {
19. AL data;
20. struct LL *nxt;
21. }LinkList;
22.
23. char Name[20];//姓名
24. char City[20];//城市
25. char Number[20];//电话号码
26. int Dial_Time;//通话次数
27. int Close_Score;//亲密度
28.
29. int Num;//联系人数量
30. LinkList *L,*head;//链表
31.
32. void login();//登陆界面
33. void menu();//功能菜单
34. void Initail();//链表初始化
35. void Insert(LinkList *p);//插入新节点
36. void Standardize(char str[]);//字母小写化
37. void Add();//添加联系人
38. void Delete();//删除联系人
39. void Edit();// 编辑信息
40. void PrintAll();//打印所有联系人至文件或屏幕
41. void Dial();//拨打电话并显示通话时长
42. void Fuzzy_Match();//模糊查找(分类查找)
43. void FM_Name();
44. void FM_City();
45. void FM_Number();
46. void Sort_Close();//亲密度排序
47. void Acquaintance_Possibility();//相识概率
48.
49. int main()
50. {
51. login();
52. Initail();
53. Sleep(1000);
54. int Key_Print,Flag;
55. while (1)
56. {
57. system("cls");
58. menu();
59. printf("请选择功能:");
60. Flag=scanf("%d",&Key_Print);
61. getchar();
62. if (Flag)
63. switch(Key_Print)
64. {
65. case 0://退出
66. printf("欢迎使用!期待下次光临!");
67. exit(0);
68. return 0;
69. case 1://添加
70. Add();
71. break;
72. case 2://打印
73. PrintAll();
74. break;
75. case 3://删除
76. Delete();
77. break;
78. case 4://编辑
79. Edit();
80. break;
81. case 5://拨打电话
82. Dial();
83. break;
84. case 6://模糊查找
85. Fuzzy_Match();
86. break;
87. case 7://亲密度查询
88. Sort_Close();
89. break;
90. case 8://相识概率
91. Acquaintance_Possibility();
92. break;
93. default:
94. break;
95. }
96. else printf("输入错误!\n");
97. system("pause");
98. }
99. return 0;
100. }
101.
102. void login()//登陆界面
103. {
104. while (1)
105. {
106. system("color b1");
107. printf("\n");
108. printf("```````````````````````````````````````````````````````````````````````````");
109. printf("\n");
110. printf("\n");
111. printf("\n");
112. printf(" *********************** 欢迎登陆电子通讯录 ************************* \n");
113. printf("\n");
114. printf("\n");
115. printf(" ---Created By GZN--- \n");
116. printf("\n");
117. printf("\n");
118. printf("```````````````````````````````````````````````````````````````````````````");
119. printf("\n");
120.
121. char LOG[20],PW[20];
122. char log[3]={'g','z','n'},pw[3]={'1','2','3'};//自定义用户密码
123. printf(" LoginName:");
124. scanf("%s",LOG);
125. printf(" Password:");
126. scanf("%s",PW);
127. if (strcmp(LOG,log)==0&&strcmp(PW,pw)==0)
128. {
129. printf("登陆成功!欢迎使用!\n");
130. return;
131. }
132. else
133. {
134. printf("\n");
135. printf(" 用户名或密码错误,请重新输入!\n");
136.
137. system("color F0");
138. Sleep(200);
139. system("color CD");
140. Sleep(200);
141. system("color A2");
142. Sleep(200);//用户输入错误的视觉提示
143.
144. system("cls");
145. }
146. }
147. return;
148. }
149.
150. void menu()//功能菜单
151. {
152. //system("cls");
153. system("color E1");
154. printf("\n");
155. printf(" ____________________________________________ \n");
156. printf(" | |\n");
157. printf(" | 电子通讯录 |\n");
158. printf(" | |\n");
159. printf(" | 0、退出系统 |\n");
160. printf(" | 1、增加联系人信息 |\n");
161. printf(" | 2、打印联系人信息 |\n");
162. printf(" | 3、删除联系人信息 |\n");
163. printf(" | 4、修改联系人信息 |\n");
164. printf(" | 5、拨打电话 |\n");
165. printf(" | 6、模糊查找 |\n");
166. printf(" | 7、亲密度排行及查询 |\n");
167. printf(" | 8、相识概率 |\n");
168. printf(" | |\n");
169. printf(" |____________________________________________|\n");
170. return;
171. }
172.
173. void Initail()//链表初始化
174. {
175. head=(LinkList*)malloc(sizeof(LinkList));
176. L=(LinkList*)malloc(sizeof(LinkList));//头节点申请空间
177. head->nxt=L;
178. L->nxt=NULL;
179. return;
180. }
181.
182. void Insert(LinkList *New)//插入新节点
183. {
184. LinkList *Old=NULL;
185. Old=L;
186. New->nxt=Old->nxt;
187. Old->nxt=New;
188. New->data.Dial_Time=0;
189. New->data.Close_Score=0;
190. return;
191. }
192.
193. void Standardize(char str[])//字母小写化
194. {
195. int i,len=strlen(str);
196. for (i=0;i<len;i++)
197. {
198. if (*(str+i)>='A'&&*(str+i)<='Z')
199. *(str+i)=*(str+i)-'A'+'a';
200. }
201. return;
202. }
203.
204. void Add()//添加联系人
205. {
206. system("color fa");
207. printf("请输入联系人的信息:\n");
208. printf("姓名:");
209. scanf("%s",Name);
210. Standardize(Name);
211. LinkList *q=L->nxt;
212. while(q!=NULL)
213. {
214. if(strcmp(q->data.Name,Name)==0)//判断是否存在
215. {
216. printf("该生已存在\n");
217. return;
218. }
219. q=q->nxt;
220. }
221. if(q==NULL)
222. {
223. LinkList *p;
224. p=(LinkList*)malloc(sizeof(LinkList));
225. p->nxt=NULL;
226.
227. strcpy(p->data.Name,Name);
228.
229. printf("城市:") ;
230. scanf("%s",City) ;
231. Standardize(City);
232. strcpy(p->data.City,City);
233.
234. printf("电话:");
235. scanf("%s",Number);
236. Standardize(Number);
237. strcpy(p->data.Number,Number);
238.
239. Insert(p);//插入p节点
240. printf("添加联系人成功!\n");
241. }
242. return;
243. }
244.
245. void Delete()//删除联系人
246. {
247. system("color f4");
248. if (L->nxt==NULL)
249. {
250. printf("通讯录为空,请增加联系人信息\n");
251. return;
252. }
253. printf("请输入您要删除的联系人的姓名:");
254. scanf("%s",Name);
255. Standardize(Name);
256. LinkList *p,*pre;
257.
258. pre=L;
259. p=pre->nxt;
260. int judge=0;
261. while (p!=NULL)
262. {
263. if (strcmp(p->data.Name,Name)==0)
264. {
265. judge=1;
266. pre->nxt=p->nxt;//前驱结点接入后继结点
267. free(p);//释放内存
268. printf("删除联系人成功!\n");
269. break;
270. }
271. pre=p;
272. p=p->nxt;//逐一推进寻找
273. }
274. if (judge==0)
275. {
276. printf("该联系人不存在,请重新输入!\n");
277. return;
278. }
279. return;
280. }
281.
282. void Edit()// 编辑信息
283. {
284. system("color 0A");
285. if (L->nxt==NULL)
286. {
287. printf("通讯录为空,请增加联系人信息\n");
288. return;
289. }
290. printf("请输入您要编辑的联系人的姓名:");
291. scanf("%s",Name);
292. Standardize(Name);
293. LinkList *ed=L;
294. int choice;
295. while (ed!=NULL)
296. {
297. if (strcmp(ed->data.Name,Name)==0)
298. {
299. do
300. {
301. printf("请输入您要编辑的联系人的信息\n");
302. printf("姓名(1)城市(2)电话(3)修改完成退出(0):");//多种编辑信息
303. scanf("%d",&choice);
304. printf("您将修改为:");
305. switch(choice)
306. {
307. case 1:
308. scanf("%s",Name);
309. Standardize(Name);
310. strcpy(ed->data.Name,Name);
311. break;
312. case 2:
313. scanf("%s",City);
314. Standardize(City);
315. strcpy(ed->data.City,City);
316. break;
317. case 3:
318. scanf("%s",Number);
319. Standardize(Number);
320. strcpy(ed->data.Number,Number);
321. break;
322. default:
323. return;
324. }
325. printf("编辑成功!\n");
326. choice=0;
327. scanf("%d",&choice);
328. }while (choice!=0);
329. return;
330. }
331. ed=ed->nxt;
332. }
333. printf("该联系人不存在,请重新输入\n");
334. return;
335. }
336.
337. void PrintAll()//打印所有联系人
338. {
339. system("color 0E");
340. int choice;
341. printf("请选择打印至屏幕(1)或文件(2):");
342. scanf("%d",&choice);
343. if (choice!=1&&choice!=2) return;
344. if (choice==2) freopen("Adress_List.txt","w",stdout);//打印通讯录至文件
345. LinkList *i,*j;
346. AL t;
347. for (i=L->nxt;i!=NULL;i=i->nxt)//按字典序从小到大排序
348. {
349. for (j=i->nxt;j!=NULL;j=j->nxt)
350. if (i->data.Name>j->data.Name)
351. {
352. t=i->data;
353. i->data=j->data;
354. j->data=t;
355. }
356. }
357. LinkList *p=L,*q;
358. int k=0;
359. while (p->nxt!=NULL)
360. {
361. q=p->nxt;
362. printf("%d:%5s %5s %11s\n",++k,q->data.Name,q->data.City,q->data.Number);
363. p=q;
364. }
365. printf("成功打印联系人至");
366. if (choice=='2')
367. {
368. fclose(stdout);
369. printf("文件");
370. }
371. else printf("屏幕");
372. printf("!\n");
373. return;
374. }
375.
376. void Dial()//拨打电话并显示通话时长
377. {
378. system("color 70");
379. if(L->nxt==NULL)
380. {
381. printf("通讯录为空,请增加联系人信息\n");
382. return;
383. }
384.
385. printf("请输入您要拨叫的用户姓名:");
386. scanf("%s",Name);
387. Standardize(Name);
388. LinkList *p=L;
389. while (p!=NULL)
390. {
391. if (strcmp(p->data.Name,Name)==0) break;
392. p=p->nxt;
393. }
394. if (p==NULL)
395. {
396. printf("该联系人不存在,请重新查找!\n");
397. return;
398. }
399.
400. clock_t start,finish;
401. start=clock();//通话开始时间
402. printf("正在通话...\n");
403. system("pause");
404. finish=clock();//通话结束时间
405. int duration=(int)(finish-start)/CLOCKS_PER_SEC;//记录时差,单位为秒
406.
407. printf("通话结束,感谢您的使用\n");
408. Sleep(500);
409. printf("本次通话持续%d秒\n",duration+2);
410. Sleep(500);
411.
412. p->data.Dial_Time+=duration+2;//累计通话时间
413. printf("您和该联系人一共通话%d秒\n",p->data.Dial_Time);
414. return;
415. }
416.
417. void Fuzzy_Match()//模糊查找(分类查找)
418. {
419. system("color 5E");
420. printf("请输入您要匹配的信息类型(姓名:1,城市:2,电话:3)\n");
421. int choice;
422. scanf("%d",&choice);
423. switch(choice)
424. {
425. case 1:
426. FM_Name();//姓名匹配
427. break;
428. case 2:
429. FM_City();//城市匹配
430. break;
431. case 3:
432. FM_Number();//电话匹配
433. break;
434. }
435. return;
436. }
437.
438. void FM_Name()
439. {
440. printf("请输入您要匹配的名字\n");
441. scanf("%s",Name);
442. Standardize(Name);
443. int l1=strlen(Name),l2,i,j,flag,cnt=0;
444. LinkList *p=L;
445. while (p!=NULL)
446. {
447. l2=strlen(p->data.Name);
448. for (i=0;i<=l2-l1;i++)
449. {
450. flag=1;
451. for (j=0;j<l1;j++)
452. {
453. if (Name[j]!=p->data.Name[i+j]) flag=0;//对照匹配姓名
454. }
455. if (flag)
456. {
457. printf("%d:%5s\n",++cnt,p->data.Name);
458. break;
459. }
460. }
461. p=p->nxt;
462. }
463. if (cnt==0)
464. {
465. printf("没有存储您想查找的联系人,请重新查找!\n");
466. return;
467. }
468. int choice;
469. printf("请选择您想查找的联系人编号:");
470. scanf("%d",&choice);
471. while (choice>cnt||choice<1)
472. {
473. printf("输入编号错误,请重新输入!");
474. scanf("%d",&choice);
475. }
476. p=head->nxt;
477. cnt=0;
478. while (p!=NULL)
479. {
480. l2=strlen(p->data.Name);
481. for (i=0;i<=l2-l1;i++)
482. {
483. flag=1;
484. for (j=0;j<l1;j++)
485. {
486. if (Name[j]!=p->data.Name[i+j]) flag=0;
487. }
488. if (flag)
489. {
490. cnt++;
491. if (cnt==choice)//找到用户想查询的联系人
492. {
493. printf("%5s %5s %15s\n",p->data.Name,p->data.City,p->data.Number);
494. return;
495. }
496. }
497. }
498. p=p->nxt;
499. }
500. return;
501. }
502.
503. void FM_City()
504. {
505. printf("请输入您要匹配的城市\n");
506. scanf("%s",City);
507. Standardize(City);
508. int l1=strlen(City),l2,i,j,flag,cnt=0;
509. LinkList *p=L;
510. while (p!=NULL)
511. {
512. l2=strlen(p->data.City);
513. for (i=0;i<=l2-l1;i++)
514. {
515. flag=1;
516. for (j=0;j<l1;j++)
517. {
518. if (City[j]!=p->data.City[i+j]) flag=0;
519. }
520. if (flag)
521. {
522. printf("%d:%5s\n",++cnt,p->data.Name);
523. break;
524. }
525. }
526. p=p->nxt;
527. }
528. if (cnt==0)
529. {
530. printf("没有存储您想查找的联系人,请重新查找!\n");
531. return;
532. }
533. int choice;
534. printf("请选择您想查找的联系人编号:");
535. scanf("%d",&choice);
536. while (choice>cnt||choice<1)
537. {
538. printf("输入编号错误,请重新输入!");
539. scanf("%d",&choice);
540. }
541. p=head->nxt;
542. cnt=0;
543. while (p!=NULL)
544. {
545. l2=strlen(p->data.City);
546. for (i=0;i<=l2-l1;i++)
547. {
548. flag=1;
549. for (j=0;j<l1;j++)
550. {
551. if (City[j]!=p->data.City[i+j]) flag=0;
552. }
553. if (flag)
554. {
555. cnt++;
556. if (cnt==choice)
557. {
558. printf("%5s %5s %15s\n",p->data.Name,p->data.City,p->data.Number);
559. return;
560. }
561. }
562. }
563. p=p->nxt;
564. }
565. return;
566. }
567.
568. void FM_Number()
569. {
570. printf("请输入您要匹配的电话\n");
571. scanf("%s",Number);
572. Standardize(Number);
573. int l1=strlen(Number),l2,i,j,flag,cnt=0;
574. LinkList *p=L;
575. while (p!=NULL)
576. {
577. l2=strlen(p->data.Number);
578. for (i=0;i<=l2-l1;i++)
579. {
580. flag=1;
581. for (j=0;j<l1;j++)
582. {
583. if (Number[j]!=p->data.Number[i+j]) flag=0;
584. }
585. if (flag)
586. {
587. printf("%d:%5s\n",++cnt,p->data.Name);
588. break;
589. }
590. }
591. p=p->nxt;
592. }
593. if (cnt==0)
594. {
595. printf("没有存储您想查找的联系人,请重新查找!\n");
596. return;
597. }
598. int choice;
599. printf("请选择您想查找的联系人编号:");
600. scanf("%d",&choice);
601. while (choice>cnt||choice<1)
602. {
603. printf("输入编号错误,请重新输入!");
604. scanf("%d",&choice);
605. }
606. p=head->nxt;
607. cnt=0;
608. while (p!=NULL)
609. {
610. l2=strlen(p->data.Number);
611. for (i=0;i<=l2-l1;i++)
612. {
613. flag=1;
614. for (j=0;j<l1;j++)
615. {
616. if (Number[j]!=p->data.Number[i+j]) flag=0;
617. }
618. if (flag)
619. {
620. cnt++;
621. if (cnt==choice)
622. {
623. printf("%5s %5s %15s\n",p->data.Name,p->data.City,p->data.Number);
624. return;
625. }
626. }
627. }
628. p=p->nxt;
629. }
630. return;
631. }
632.
633. void Sort_Close()//亲密度排序
634. {
635. system("color CF");
636. if(L->nxt==NULL)
637. {
638. printf("通讯录为空,请增加联系人信息\n");
639. return;
640. }
641. LinkList *i,*j;
642. AL t;//信息存储类型
643. int Sum_Dial=0,k=0;
644. for (i=L->nxt;i!=NULL;i=i->nxt) Sum_Dial+=i->data.Dial_Time;//累计用户总通话时间
645. if (Sum_Dial==0)//未通话无法计算亲密度
646. {
647. printf("您的通话记录为空!\n");
648. return;
649. }
650. for (i=L->nxt;i!=NULL;i=i->nxt)
651. i->data.Close_Score=min(99,i->data.Dial_Time*100/Sum_Dial+rand()%20+20);
652. for (i=L->nxt;i!=NULL;i=i->nxt)//亲密度排序
653. {
654. for (j=i->nxt;j!=NULL;j=j->nxt)
655. if (i->data.Close_Score<j->data.Close_Score)
656. {
657. t=i->data;
658. i->data=j->data;
659. j->data=t;
660. }
661. }
662. for (i=L->nxt;i!=NULL;i=i->nxt)
663. printf("Rank%d:%5s Dial:%4d Close_Score:%2d%%\n",++k,i->data.Name,i->data.Dial_Time,i->data.Close_Score);
664. return;
665. }
666.
667. void Acquaintance_Possibility()//相识概率
668. {
669. system("color F0");
670. printf("请输入两个联系人姓名,将输出两人相识的概率!\n");
671. int poss=rand()%10;
672. char n1[20],n2[20];
673. LinkList *i,*j;
674. printf("请输入第一个联系人姓名:");
675. scanf("%s",n1);
676. for (i=L->nxt;i!=NULL;i=i->nxt)
677. if (strcmp(i->data.Name,n1)==0) break;//寻找目标联系人存储结点
678. if (i==NULL)
679. {
680. printf("该联系人不存在!\n");
681. return;
682. }
683. printf("请输入第二个联系人姓名:");
684. scanf("%s",n2);
685. if (strcmp(n1,n2)==0)
686. {
687. printf("两个联系人相同,输入错误!\n");
688. return;
689. }
690. for (j=L->nxt;j!=NULL;j=j->nxt)
691. if (strcmp(j->data.Name,n2)==0) break;
692. if (j==NULL)
693. {
694. printf("该联系人不存在!\n");
695. return;
696. }
697. if (strcmp(i->data.City,j->data.City)==0) poss+=20+rand()%50;//概率公式计算相识概率
698. printf("两人相识的概率为:%d%%\n",poss);
699. return;700. }
分析总结、收获和体会:
优点(你最满意的设计):
创新之处:
不足之处:
需要改进的地方:
同上
收获与体会:
细节决定成败。
金无足赤,人无完人。
自我评价: 是 否
程序是否能通过编译并正常运行,没有bug? √
是否在撰写报告之前观看了spoc里的代码风格视频? √
程序代码是否符合代码规范(模块化,变量和函数命名规范,对齐与缩进,有必要的注释)? √
是否按模块化要求进行了程序设计,系统功能是否完善? √
是否是独立完成,未参考其他人的设计或代码? √
自我评语:
我认为我在本次实验大作业中认真仔细地编写代码,充分体现了我高级语言程序设计能力突出和经验丰富的优点,并在实验过程中挑战自我、弥补缺漏,使本次大作业既成为检验能力的好机会,又是激发潜力的好方式。希望我在本次程序设计和报告撰写上下的功夫,能成为我编程素养较高的重要标志,更希望我能以此为新台阶,不断进步,超越自我。
报告完成日期:2018.12.25