Github文件下载地址哈工大2018秋高级语言程序设计课程

《高级语言程序设计》实验大作业反思报告

实验大作业题目 智能趣味电子通讯录 类型 信息管理系统
学生姓名 郭茁宁 班 号 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. 退出系统

  1. 增加联系人信息
  2. 打印联系人信息
  3. 删除联系人信息
  4. 修改联系人信息
  5. 拨打电话
  6. 模糊查找
  7. 亲密度排行及查询
  8. 相识概率
    实验环境:
    操作系统: Win10
    集成开发环境:Dev C++ 5.11或Codeblocks17.12
    外部库:无
    输入输出设计:
    输入类型:
  9. 输入字符串验证账号密码
  10. 输入数字选择通讯录对应功能
  11. 添加新联系人中,输入字符串和数字存储信息
  12. 在功能分支的人机交互中,输入数字选择不同功能模式

输入设计:
功能选择中,有效应对用户输入错误格式的问题,保证了运行流畅和程序健壮性。存储联系人时,统一规定为英文格式,对于信息有较强的包容性,将字母小写化,高效应对查找时不匹配。

输出类型:

  1. 联系人信息按原格式输出
  2. 计算亲密度和概率值时,统一为百分制整型输出

输出设计:
每次输出暂停程序,供用户仔细查看结果。打印联系人按后对齐输出,提升用户直观体验。可选择打印至指定文件,供用户存储和查看。标记输出结果的实际意义,提高使用可读性。
系统设计与实现:

  1. 系统功能模块划分
    对系统进行自顶向下的模块分解,画出系统各个功能模块之间的结构图如下:

  2. 函数功能和外部接口设计
    本系统总计设计了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 相识概率 无 无
    各个函数之间的调用关系如下所示:

  3. 算法

  4. 递归法创建、删除、查询链表(使用了递归算法)

  5. 选择排序(字典序、亲密度降序)(常用的排序和查找算法)

  6. 字母小写化

  7. 字符串模糊匹配(模糊匹配算法,或高效的模式匹配算法)

  8. 多信息分类查找(分类统计算法)

  9. 文件打印(文件操作)

  10. 数据结构

  11. 递归式动态链表

  12. 并查集

  13. 程序主流程图
    系统总体流程图如下:

实验过程中遇到的问题及解决方法与思路:
问题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. }

分析总结、收获和体会:
优点(你最满意的设计):

  1. 链表动态储存
  2. 选择排序优化
  3. 多种趣味功能(见“创新之处”)

创新之处:

  1. 出类拔萃、脱颖而出的通话功能
  2. 趣味横生、极富人性化的亲密度排序
  3. 数学意味浓厚的概率学公式应用

不足之处:

  1. 输入格式错误的健壮性
  2. 排序稳定性和高效性
  3. 程序结构动态来回运行能力

需要改进的地方:
同上

收获与体会:
细节决定成败。
金无足赤,人无完人。

自我评价: 是 否
程序是否能通过编译并正常运行,没有bug? √
是否在撰写报告之前观看了spoc里的代码风格视频? √
程序代码是否符合代码规范(模块化,变量和函数命名规范,对齐与缩进,有必要的注释)? √
是否按模块化要求进行了程序设计,系统功能是否完善? √
是否是独立完成,未参考其他人的设计或代码? √
自我评语:
我认为我在本次实验大作业中认真仔细地编写代码,充分体现了我高级语言程序设计能力突出和经验丰富的优点,并在实验过程中挑战自我、弥补缺漏,使本次大作业既成为检验能力的好机会,又是激发潜力的好方式。希望我在本次程序设计和报告撰写上下的功夫,能成为我编程素养较高的重要标志,更希望我能以此为新台阶,不断进步,超越自我。
报告完成日期:2018.12.25

哈工大2018秋高级语言程序设计课程大作业相关推荐

  1. 爱课程 c语言程序设计 苏小红,2018秋高级语言程序设计(苏小红)

    一.成绩累计方式 (1)自主式作业 由系统随机抽题的自主式作业,占总成绩的20%. 学生登录面向学生自主学习的高级语言能力测试平台(SSE),自主选择知识点和难度系数,平台自动从后台的题库系统中随机抽 ...

  2. c语言程序设计0039大作业答案,西南大学20年12月[0039]C语言程序设计课程大作业参考...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 要答案非免费q:751495932 西南大学培训与继续教育学院课程考试试题卷学期 2020年秋季 课程名称[编号]:C语言程序设计[0039] 考试类别: ...

  3. 大工2021秋《软件工程》课程大作业

    答案点击主页+v 网络教育学院 <软件工程>课 程 大 作 业 题 目: 姓 名: 报名编号: 学习中心: 层 次: 专 业: 第一大题:谈谈你对本课程学习过程中的心得体会. 第二大题:完 ...

  4. 好家伙!清华电子系大一暑假Python课程大作业上知乎热榜!竟是个CV任务

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 编辑:Amusi  |  来源:知乎 https://www.zhihu.com/question/4719 ...

  5. 人工智能与机器学习课程大作业(四、函数优化)

    本文为人工智能与机器学习课程大作业第四部分(四.函数优化) 本文仅作学习参考使用! 其他章节跳转: 一.知识工程基础 二.函数逼近 三.模糊逻辑 四.函数优化 目 录 四.函数优化 4.1 函数可视化 ...

  6. java期末大作业设计_java程序设计-期末大作业报告模板.doc

    云南大学软件学院报告 Java programming – final Report School of Software, Yunnan University 个人成绩 序号学号姓名成绩12345 ...

  7. 0039c语言作业答案2020,西南大学2019年网络与继续教育[0039]《C语言程序设计》大作业试题(资料).doc...

    西南大学2019年网络与继续教育[0039]<C语言程序设计>大作业试题(资料).doc 文档编号:764150 文档页数:4 上传时间: 2019-10-12 文档级别: 文档类型:do ...

  8. Bailian4149 课程大作业【DP】

    4149:课程大作业 总时间限制: 1000ms 内存限制: 65536kB 描述 小明是北京大学信息科学技术学院三年级本科生.他喜欢参加各式各样的校园社团.这个学期就要结束了,每个课程大作业的截止时 ...

  9. HTML网页设计期末课程大作业 ~中国茶文化5页面带轮播(HTML+CSS+JS)~ 学生网页设计作业源码...

    HTML网页设计期末课程大作业 ~ 中国茶文化5页面带轮播(HTML+CSS+JS)~ 学生网页设计作业源码 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从 ...

最新文章

  1. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量
  2. 如何将模糊的图片变得清晰
  3. eos和以太坊有什么关系_以太坊 2.0是什么?
  4. hash算法的介绍 【清晰易懂】
  5. mysql不用left join_MySQL在右表数据不唯一的情况下使用left join的方法_MySQL - join
  6. Sales area data model research in QDD
  7. java免检异常_java-异常
  8. 企业到底需要什么样的飞鸽传书
  9. SAP算号器 license key Developer Access Key 完美解决方案
  10. Zuul转发请求时HttpHostConnectException can‘t cast to ZuulException问题解决方法
  11. 文档在线编辑组件的发展回顾与开发集成选择问题
  12. Shiro(五)——Shiro整合SSM入门完整案例
  13. Android多国语言values语言包
  14. ArcGIS 矢量编辑札记(一):Field Calculator 篇
  15. 【表格】从1G到5G的移动通信发展历程(精简版)
  16. java中的main_Java中的main()方法详解
  17. mysql alter table if exists_MySQL中的alter table命令的基本使用方法及提速优化
  18. 麻省理工学院公开课:计算机科学及编程导论 课堂笔记
  19. PLM与ERP的区别
  20. 达梦数据库基础篇--数据库管理工具

热门文章

  1. 【算法设计与分析】8枚硬币及n枚硬币问题
  2. A记录和CNAME记录——【网络】
  3. 主机记录(A记录)是什么
  4. @import 错误用法
  5. VS2019和boost编译支持xp系统
  6. [爱情] [奋斗][主演:佟大为 李小璐][赵宝刚2007励剑之作][更新至24集]
  7. Android S内置APK时AndroidManifest使用uses-library编译报错
  8. 计算机专业考研有必要二战吗,我,到底要不要选择二战考研?​
  9. 安装miniconda出现丢失api-mis-win-core-path-l1-1-0.dll的解决方案
  10. 150万奖金:首届6G智能无线通信系统大赛正式上线