2024年4月19日发(作者:)

一、 引言(简要说明设计题目的目的、意义、内容、主要任务等)

1.1设计目的

本次系统软件课程设计的主要目的有两个:一方面是分析设计linux源代码,另一方面

是进行系统级的程序设计。

1.2 题目与要求

我计划编写的题目是:⑴小学算术运算测试程序。制作一个可供小学数学运算的程序:

10以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。并用make工程管

理器编译,编写makefile文件。⑵简单聊天程序。在linux下用C语言编写一个简单的网络

聊天程序。实现网络传输功能。

1.3内容及主要任务

⑴小学算术运算测试程序:要求完成 10 以内的加减运算。 能根据用户 输入的想要练

习的题目数自行出题。用户输入答案后可以判断正误,并能给出算对及算错的题目数,最后

计算出分数。同时,对于用户算错的题目会发出报警声,提示用户注意,同时给出正确结果。

做完一次测试后用户可决定是否继续进行下一次测试。

⑵简单聊天程序:本课题是建立聊天通信模型,设计一个聊天室软件, 包括服务器端

和客户端, 主要功能为:Ⅰ、 服务器端功能:①初始化 socket创建服务器端。②维护一

个链表,保存所有用户的 IP 地址、端口信息。③接受用户传送来的聊天信息,然后向链表

中的所用用户转发。④接受用户传送来的连接判断命令,并向用户发出响应命令。Ⅱ、 客

户端功能: 客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用

户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。

1.4题目设计意义

⑴通过本课题的毕业设计,熟悉了关于linux下C语言的系统软件程序设计,可以比较

深入的了解和掌握 WINSOCK 控件基本属性、方法和事件,理解 网络聊天通信的概念,输控

制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。 并能巩固和扩展大

学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。

⑵随着计算机网络技术的快速发展,人们的交流方式越来越多,传统的通信方式在速度

和可靠性方面已经很难满足人们的需要,即时通信系统已成为人们的新宠。同时,即时通信

系统对现代企业也有着重大意义,它为诸企业开拓了网络应用的新领域。自从它诞生以来,

以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的

一部分。本着学以致用的原则,本人开发了这套多点聊天系统,以满足网络用户的通讯需求。

该系统具有操作简单、界面友好、功能专一等特点。

⑶本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深

入细致的讨论。

二、 正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、

编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论

等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、

结构严谨,符合各学科、专业的有关要求。)

任务一:小学数学运算程序

2.1.1主要内容

本程序共分为五个模块:出题模块、答题模块、检查计分模块、评分模块和评价模块;

下面分别对这五个模块的算法做一下介绍。

⑴出题模块:一个答题系统自然而然首先就是要有题目且能够根据条件出题;在本模块

中,首先设了一个含有15个指针的指针数组,指针数组里的每个指针都指向了相应题号的

1

选择题,这样就实现了对题目的储存;然后用 scanf 函数来实现从键盘上输入题号,用 if

语句控制输题的范围;题号不在 1--15 的范围内就提示选题出错;在输入题号的过程中输

入相同题号是在所难免的;但 是在答题系统中输入相同题号显然没有意义,所以另外设了

一个静态一维数组来储存已输过的题号;且数组的第一个元素初始化为 0,然后每输入一个

题号就赋给这个数组,同时用 for 语句来使当前的题号一一与储存在一维数组中已输过的

题号进行比较,如题号有相同,就提示重答,重答的功能是通过对出题模块函数的递归调用

来实现的,如题号没有相同,就通过输入的题号借助指针数组里的指针找到与题号对应的选

择题,用 puts 函数来实现对选择题的输出;最后用 return 语句将其他模块返回来每道题

的小分数返回到主函数中(在主函 数中调用出题模块函数)。

⑵答题模块:出完题后自然是从键盘上输入答案了,在本模块中,提示输入答案后,用

scanf 函数来实现使从键盘上输入的一个答案选项(A、B、C、D) 赋给一个用来记录答案的

字符变量;用 return 语句将这个变量返回到出题模块中。

⑶检查计分模块:输入答案选项后,就要判断答案的正确性和计分了,在本模块中,要设

一个字符数组来储存每道题的正确答案;用 if 语句来控制在答题模块中输入的答案是否为

A、B、C、D 中的某一个;若不是,就提示选的答案不在答案范围内,若是,根据在出题模块

中输的题号使在答题模块中输入的答案选项与储存正确答案数组中的相应答案选项相比较,

若相同,就提示答案正确,与此同时用变量记录下这道题所得的小分,否则,就提示答案错误

并给出当前题目的正确答案,不计分;用 return 语句将得分返回到出题系统中(在出题 模

块函数中调用检查计分模块函数)。

⑷评分模块:做完题后,就要根据做题的对错个数来评分;在本模块中,首先就要提示题

目全做完,用switch语句根据总小分来选择性地选出11个不同的分数中的一个分数,并且

打印出该分数 (在主函数中调用评分模块函数) 。

⑸评价模块:最后一步就是要根据不同的总得分段来给出不同的评语,在本模块中用 if

语句根据不同的总分数段来打印出不同的评语(在主函数中调 用评价模块函数) 。

主函数将这五个模块直接地或间接地联系在一起,使它们构成本程序,现在就来介绍主

函数的算法。主函数对出题模块函数、评价模块函数进行了调用;首先提示开始答题,为了

要答 10 次题,就要设一个 for 语句来控制对出题模块函数调用的次数,即需要答一定次数

的题,与此同时用一个变量来累加由出题模块函数返回来每道题的小分数;接下来分别对评

分模块函数和评价模块函数进行调用。

以上就是对本程序算法的介绍。

2.1.2 程序结构及主要过程

⑴本程序共包含了顺序结构、选择结构、循环结构三种在 C 程序中的主要结构,其中

穿插了数组(一维数组、字符数组)、指针 (指针数组)、函数调用(递归调用)等知识,该程

序覆盖了本学期所学的除结构体外的大部分知识。

⑵本程序结构和过程思路如下:为了要答题,首先要有题目,设一个指针数组来实现;

把相应的题目调出,应用指针的功能实现;调出题目后,就要给用户答题了,用一个输入函

数实现;再经过系统的判断,用一个字符数组储存正确答案结合判断语句实现;最后累加计

分,用循环结构实现。

⑶总之,该程序的总体结构和过程很好的体现了现在所提倡的对一个程序结构模块化

的思想。

2.1.3 程序模块功能说明

本程序一共有五个模块,它们分别是:出题模块(question_out()),答题 模块

(answer()),检查计分模块(check()),评分模块(count()),评价模块 (assessment()),

现在就来分别介绍这五个模块的功能。

2