中南大学2011级“C语言程序设计实践”任务书(正式版)

更新时间:2023-08-30 11:16:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中南大学2011级“C语言程序设计实践”任务书(正式版)

中南大学2011级

“C语言程序设计实践”任务书

信息科学与工程学院电气与自动化实验室

2012年5月

中南大学2011级“C语言程序设计实践”任务书(正式版)

目 录

一、指导老师安排 ........................ 2 二、课程设计要求 ........................ 2 三、结构化程序设计方法 ................... 2 四、相关管理系统设计题的基本功能要求 ........ 3 五、成绩评定要素 ........................ 六、课程设计报告基本内容要求 ............... 八、设计题(共13题 ) ................... 九、上机地点及时间安排表(第18周至第19周) .. 附录1: ............................. 附录2: ........................... 1附录3: ........................... 1

3446745

中南大学2011级“C语言程序设计实践”任务书(正式版)

“C语言程序设计实践”任务书

一、指导老师安排

电气信息类1119班:唐朝晖、李志民 电气信息类1120班:唐朝晖、李志民 电气信息类1124班:叶华文、李志民 电气信息类1125班:叶华文、李志民 电气信息类1127班:袁艳、李志民

二、课程设计要求

本次“C语言程序设计实践”课程设计,是基于“C语言程序设计基础”课程学习内容的重要实践环节,其主要目的在于,通过综合程序课程设计,培养和提高学生的独立分析问题、解决实际问题的能力和计算机语言编程能力。本次课程设计时间为2周,要求每位同学在为期两周的时间段内,独立完成相关设计题所规定的任务(上机时数为20学时)。进度安排建议如下:

1、阅读设计题目、任务内容,规划设计进度,并进行软件的各相关功能模块的规划设计(1天)。

2、在Turbo C(或Visual C++6.0)环境下,用结构化程序设计思想进行C语言程序设计、功能模块调试(7-9天)。

3、进行课程设计报告编写与整理(2天)。

4、课程设计结束时,要求进行设计成果演示(由指导老师验收相关程序运行成果并打分);每人须对相关电子文档进行整理上交(包括:程序文件、帮助说明文档);交课程设计报告(纸质)一份(手工书写稿)。课程设计报告基本内容及格式参考P4页上内容。

三、结构化程序设计方法

结构化技术是软件工程中最成熟的技术之一,它包括结构化分析方法(Structured Analysis)、结构化设计方法(Structured design)和结构化程序设计方法( Structured Programming),简称为SA-SD-SP方法。它的总的指导思想是自顶向下、逐步求精、单入口/单出口,基本原则是抽象和功能的分解。对于较为复杂问题的大型程序开发,应采取“自顶向下、逐步细化和模块化”的设计方法,模块化程序设计是结构化程序设计方法在开发大型程序中的应用。

1、自顶向下、逐步细化、逐步求精

所谓“自顶向下,逐步细化、逐步求精”就是在对于给定问题进行透彻的了解和详细的分析的基础上,把问题分解成若干个按顺序执行的逻辑部分,称为“模块”。每个子任务如果仍很复杂,还可以再分解为若干个子任务。如此逐层分解,对于每个模块的设计都采用这种“自顶向下、逐步细化”的方法,将它们分解成为基本结构为止,就如同写文章先拟出题

中南大学2011级“C语言程序设计实践”任务书(正式版)

目和中心内容,再确定分为几大部分,每一大部分又分哪几节,每一节分为几段,每一段包括哪几个意思,这就是“自顶向下,逐步细化”的方法。

2、菜单技术

当一个程序的规模比较庞大,层次和模块比较多时,不要每次都将所有模块按顺序执行一遍,最好在每一层,至少在最高几层都设一个“菜单”。为方便用户操作,“菜单”技术已广泛使用在计算机的系统软件中,具体做法是:程序首先把各功能说明及相应代号以菜单形式显示在屏幕上,然后由用户在键盘上输入所选的功能代号,程序自动转去调用相应的功能模块进行处理。

四、相关管理系统设计题的基本功能要求

1、数据文件管理功能:创建新文件、管理老文件(包括:Open、New )。 2、输入/添加/插入记录:能够完成对任意一条记录输入、添加或插入数据表中,并保存到数据文件中。

3、显示、查询记录:能够打开已存在的数据表文件,根据用户要求按所给记录关键字显示、查询一个或多个相关联记录的各项信息。

4、修改记录:能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。

5、删除记录:能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。

6、统计功能:能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:总数、平均值、分段信息),例如:按课程得分为100、90~99、80~89、70~79、60~69和不及格学生的人数,以及所占百分比。

7、排序:对记录进行排序。例如:按某门课程的成绩排序,或按成绩总分进行排序等。

在正确、合理的软件功能规划的基础上,进行各功能模块的设计。建议用文件包含或工程文件形式,进行逐个模块的功能调试与功能实现。切忌将多个功能模块混合一起进行调试。有关C语言程序设计参考,见附录1。

五、成绩评定要素

成绩分为优、良、中、及格、不及格五档,考核标准如下:

1、 验收程序的可用性,实用性,通用性,可扩充性(程序设计源代码)(50%) 2、 学生的动手能力,创新精神(10%) 3. 程序设计说明书(30%) 4. 平时成绩(10%)

中南大学2011级“C语言程序设计实践”任务书(正式版)

六、课程设计报告基本内容要求

一、封面(封面格式见附录2) 二、目录

三、本次课题的基本内容和要求 四、软件设计整体规划及方案 五、程序功能简介

六、主体内容(简要说明总体情况,详细介绍本人任务部分):

1、设计分析

2、程序结构(画总体模块图、本人设计部分的程序N-S或ANSI流程图) 3、各模块的功能及程序说明 4、相关模块源程序 5、操作方法(流程)

6、试验结果(包括输入数据和输出结果) 7、设计体会 8、参考文献

中南大学2011级“C语言程序设计实践”任务书(正式版)

八、设计题(共13题 )

1-12题为信息管理类型题目,13题为控制类型题目。每个题目有人数的限制,每位学生可以根据自己的情况独立选择一题作为设计任务,鼓励几个同学搭档分组,分工合作完成。以下题目的基本功能要求仅供参考,建议同学根据实际应用状况及要求,进行合理规划。

选题1:销售信息管理系统(建议2-3人)

调研、选择一个典型销售案例,实现按月进行销售员销售业绩信息管理。其中,每个 销售员记录,包括编号,姓名,产品1销售额,产品2销售额,。。。产品N销售额,总销售额等信息。具体功能要求参见P3。

选题2:职工工资信息管理系统:(建议2-3人)

调研、选择一个典型职工信息管理案例,实现按月保存职工的工资数据。其中,每位职工记录,包括编号、姓名、职务基本工资、岗位津贴、其他补贴、应发工资、实发工资;扣除项目包括:所得税、住房公基金、养老金、医疗保险、失业保险、职务、基本工资、奖金,工资总额。具体功能要求参见P3。

选题3:图书信息管理系统:(建议2-3人)

调研、选择一个典型图书信息管理案例,实现图书库存、借阅信息管理。每本图书的记录信息包括:书号、书名、作者,单价、库存数量、出版时间、出版单位、价格等。具体功能要求参见P3。

选题4:材料管理系统:(建议2-3人)

调研、选择一个典型仓库材料信息管理案例,实现材料库存、领用信息信息管理。每种材料的记录信息,包括:编号、名称、单价、入库数量、库存数量、出库数量、保管人、进货时间、出货时间和备注等。具体功能要求参见P3。

选题5:学生成绩管理系统:(建议2-3人)

调研、选择一个典型学生学籍(成绩)信息管理案例,实现以班为单位的学生成绩信息管理。学生成绩的基本信息包括:学号、姓名、五门以上课程成绩、成绩总分、平均成绩等。具体功能要求参见P3。

选题6:设备管理系统:(建议2-3人)

调研、选择一个典型设备信息管理案例,实现各基层单位的设备资产信息管理。每个设备的记录信息,包括设备编号(8位数)、仪器名称、型号规格、单价、购入日期、领用人、使用状况和备注(50字)。具体功能要求参见P3。

选题7:通信录(建议1-2人)

以班为单位进行通讯录信息管理。每个记录包括:序号、姓名、性别、年龄、电话,籍贯、现工作单位、家庭住址、通信地址及邮编等。具体功能要求参见P3。

选题8:人事信息管理系统(建议2-3人)

中南大学2011级“C语言程序设计实践”任务书(正式版)

调研、选择一个典型人事基本信息管理案例,实现某基层单位的人事基本信息管理。人事基本信息包括:职工号(职工号不重复)、姓名、性别、年龄、学历、职称、基本工资、岗位津贴、工资总额、在岗状况等。具体功能要求参见P3。

选题9:人员基本信息管理系统 (建议2-3人)

调研、选择一个典型人员基本信息管理案例(例如:流动人口管理、小区楼栋居民管理等),实现分片或楼栋为数据库的人员基本信息管理。信息包括:序号,姓名,年龄,性别,出生年月,籍贯,电话,E-mail等。具体功能要求参见P3。

选题10:学生选修课程信息管理系统(建议2-3人)

调研、选择一个典型学生选课基本信息管理案例,实现对多门课程的选课信息管理。每门课程的基本信息,包括:课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。具体功能要求参见P3。

选题11:小学算术运算测试(建议1-2人)

实现不同年级程度的算术运算能力测试(加、差、乘、除)。要求每套试卷共十题,能够 根据练习水平和进度随机产生数据和不同运算要求,并建议制答题时间。能判断结果正确性, 给出综合评分(包括:答题时间、正确率、总分、累记平均分等),并保存文件/打开文件。

选题12:宿舍信息管理系统(建议2-3人)

调研、选择一个典型学生宿舍楼的住房基本信息管理案例,实现学生区各个宿舍楼的宿舍信息管理。每个宿舍基本信息包括:楼层号、房间号、面积、可住宿人数、实际住宿人数、修缮状况(良好/待维修)、备注(记录入住人员姓名、性别、年龄、单位等)。具体功能要求参见P3。

选题13:基于C语言的模拟电梯系统程序设计(建议每组5-6人)

根据“模拟电梯控制任务说明书”的规定,设计实现一个模拟电梯控制的仿真软件,方便进行相关控制策略验证和分析。这一任务可由包含5-6名同学的小组集体完成。通过该作业,希望同学们能够复习巩固结构化程序设计知识,培养良好的程序设计风格与习惯,了解软件开发的整个过程,学习书写简单文档,练习多人合作开发软件。“设计任务说明书”详见附录3。

中南大学2011级“C语言程序设计实践”任务书(正式版)

九、上机时间安排表(第18、19周)

电气与自动化专业实验室

2012年5月22日

中南大学2011级“C语言程序设计实践”任务书(正式版)

附录1:

《C语言程序设计实践》课程设计

参考及指导

设计参考题目:通信录管理系统

一、 程序组织方法

在Turbo C或VC++6.0中新建一个工程,再按下述方法创建各源程序文件。 1.将所有包含文件、符号常量定义、数据类型定义存放在头文件"task1a.h"中,此文件基本不用改动。将所有函数声明存放在头文件"task1b.h"中,每当定义一个新的函数时,就在此文件中增加一行此函数的声明,并在注释中标明定义此函数的文件。这样在每个源程序文件开头只需有2条包含命令:

#include "task1a.h" #include "task1b.h"

2.将main()函数单独存放在一个源程序文件"task1000.c"中。

3.将main()函数主菜单中直接调用的函数的定义存放在源程序文件"task1100.c"、"task1200.c"、"task1300.c"、…中。

4.将一些公用的函数的定义存放在源程序文件"task1900.c"中。 5.将"task1100.c"中调用的函数的定义存放在源程序文件"task1110.c"、"task1120.c"、"task1130.c"、…中。将"task1120.c"中调用的函数的定义存放在源程序文件"task1121.c"、"task1122.c"、"task1123.c"、…中。 6.每增加一个模块,调通测试后,将所有源文件复制到一个文件夹保存。文件夹命名的规则和顺序可如下:v0.00, v0.01, v0.02, v0.03, … 全部完成后最终保存所有源文件的文件夹命名为v1.00。初始版本v0.00由老师提供。

二、 部分参考程序

1.头文件"task1a.h"的格式和内容:

/* prj1: head file "prj1a.h" */

#ifndef PRJ1A_SOFTW05 /* Start of head file "prj1a.h" */ #define PRJ1A_SOFTW05

中南大学2011级“C语言程序设计实践”任务书(正式版)

#include "stdio.h" #include "conio.h" #include "string.h"

#include "stdlib.h"

#define NODE struct comm_info /* 定义结点类型 */ #define LEN sizeof(struct comm_info) /* 定义结点长度 */ #define TRUE 1 /* 符号常量定义 */ #define FALSE 0 /* 符号常量定义 */ #define MAXLINE 1000 /* 符号常量定义 */ #define LIMIT 100000 /* 符号常量定义 */

/* 全局变量的定义在prj1030.c文件中 */

extern long count; /* 全局变量声明 */ extern NODE * head; /* 全局变量声明 */ extern NODE * tail; /* 全局变量声明 */ extern NODE * np[LIMIT]; /* 全局变量声明 */

struct comm_info { /* 定义通信信息结构体类型 */ long num; /* 编号 */ };

#endif /* End of head file "prj1a.h" */

2.头文件"task1b.h"的格式和部分内容(可添加更多函数声明): /* prj1: head file "prj1b.h"

char group[16]; /* 分组 */

char name[16]; /* 姓名 */

char hphone[16]; /* 固话home_phone */ char mphone[16]; /* 手机号mobile_phone */ char qq[16]; /* QQ号码 */ char email[20]; /* e-mail地址 */

char code[10]; /* 邮政编码 */

int len; /* 家庭住址或通信地址长度 */ char *addr; /* 家庭住址或通信地址 */ struct comm_info *prev; /* 前向链表指针 */ struct comm_info *next; /* 后向链表指针 */

中南大学2011级“C语言程序设计实践”任务书(正式版)

contains only function declarations */

#ifndef PRJ1B_SOFTW05 /* Start of head file "prj1b.h" */ #define PRJ1B_SOFTW05

/* 所有自定义函数都应在下面加以声明: */

void show_version(void); /* 在prj1010.cpp文件中定义 */ void login(void); /* 在prj1020.cpp文件中定义 */ void set_list(void); /* 在prj1030.cpp文件中定义 */ void display(void); /* 在prj1100.cpp文件中定义 */ void add_record(void); /* 在prj1200.cpp文件中定义 */ void del_record(void); /* 在prj1300.cpp文件中定义 */ void find(void); /* 在prj1400.cpp文件中定义 */ void modify(void); /* 在prj1500.cpp文件中定义 */ void sort(void); /* 在prj1600.cpp文件中定义 */ void help(void); /* 在prj1700.cpp文件中定义 */ void warn_exit(void); /* 在prj1700.cpp文件中定义 */ void save(void); /* 在prj1800.cpp文件中定义 */

int menu(void); /* 在prj1001.cpp文件中定义 */ void new_data(void); /* 在prj1031.cpp文件中定义 */ void old_data(void); /* 在prj1032.cpp文件中定义 */ void ptrcopy(void); /* 在prj1033.cpp文件中定义 */ int exist(long num); /* 在prj1034.cpp文件中定义 */ void ins_node(NODE *p); /* 在prj1035.cpp文件中定义 */

void pause(void); /* 在prj1900.cpp文件中定义 */ void clrscr(void); /* 在prj1900.cpp文件中定义 */ int YesOrNo(void); /* 在prj1900.cpp文件中定义 */

void newline(int n); /* 在prj1900.cpp文件中定义 */

#endif /* End of head file "prj1b.h" */

3.源程序文件"task1000.c"的内容: /* prj1: source file "prj1000.cpp"

contains main() */

#include "prj1a.h" #include "prj1b.h"

中南大学2011级“C语言程序设计实践”任务书(正式版)

通信录管理系统主函数。 */

main(int argc, char *argv[]) {

int option;

show_version(); login(); set_list(); if ( argc == 1 )

option = menu();

else if ( argc == 2 && (*++argv)[0] == '-' )

switch (*++argv[0]) {

case 'd': option = 1; break; case 'a': option = 2; break; case 'r': option = 3; break; case 'f': option = 4; break; case 'm': option = 5; break; case 's': option = 6; break; case 'h': option = 7; break; case 'x': option = 8; break; case 'q': option = 0; break; default: help();

option = menu(); break;

} else { }

help();

option = menu();

while ( 1 ) {

switch (option) { case 1: display(); break; case 2: add_record(); break;

case 3: del_record();

break;

中南大学2011级“C语言程序设计实践”任务书(正式版)

}

}

break;

case 5: modify();

break;

case 6: sort(); break; case 7: help(); break; case 8: save();

break;

case 0: warn_exit(); }

option = menu();

return 0;

4.源程序文件"task1900.c"的内容: /* prj1: source file "task1900.cpp" contains functions in common use */

#include "prj1a.h" #include "prj1b.h"

/* waiting */ void pause(void) { }

/* clear screen */ void clrscr(void) { }

/* Get a response: return 0 for No, 1 for Yes */

printf("\nPress any key to continue "); getch();

system("cls");

中南大学2011级“C语言程序设计实践”任务书(正式版)

int YesOrNo(void) { }

5.源程序文件"task1100.c"的初始内容(为学生提供的初始模板): /* prj1: source file "prj1100.cpp"

contains display() */

#include "prj1a.h" #include "prj1b.h"

/* display records in the list. */

void display(void) {

clrscr();

/*

Add real functions here

学生在此填入适当内容,从而实现函数的正常功能。 */ }

printf("\nI am display()\n"); /* will be deleted */ pause(); char r; do {

r = getch();

} while ( r != 'Y' && r != 'y' && r != 'N' && r != 'n' ); if ( r == 'Y' || r == 'y' ) return 1; else

return 0;

中南大学2011级“C语言程序设计实践”任务书(正式版)

三、main函数流程图(程序框架)

中南大学2011级“C语言程序设计实践”任务书(正式版)

附录2:

中南大学

Central South University

课程设计报告

题 目: 设 计 者: 专业班级: 学 号: 指导教师: 所属院系:信息科学与工程学院

年 月 日

中南大学2011级“C语言程序设计实践”任务书(正式版)

附录3:

模拟电梯控制设计任务说明书

根据下面的功能描述,编程、调试模拟电梯控制软件。

一、电梯配臵

★ 共有1个电梯

★ 共有maxfloor层楼层,这里maxfloor暂时取做9。范围是5-9层 ★ 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按

钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭

★ 电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示

灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭

★ 另有一启动按钮(GO)。当电梯停在某一楼层后,接受到GO信息就继

续运行。如果得不到GO信息,等待一段时间也自动继续运行。 ★ 电梯内设有方向指示灯表示当前电梯运行方向。

二、电梯的运行控制要求

★ 电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。 ★ 乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼

层可能不是电梯当前运行方向可达的楼层。

★ 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1

层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位臵掉头,此时掉头后经过的第一个楼层不可停。

★ 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分

析和响应。

中南大学2011级“C语言程序设计实践”任务书(正式版)

★ 乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设

电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。

★ 当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响

应。

★ 电梯停靠某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指

示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。

★ 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。

三、电梯运行的控制策略

以下是几个候选策略(仅供参考): 1、先来先服务策略:

将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。

2、顺便服务策略:

顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。

可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下:

(1)修改目标楼层的策略:

a.如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。

中南大学2011级“C语言程序设计实践”任务书(正式版)

b.如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。

(2)确定新的目标楼层的策略:

如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层:

a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。

b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。

c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。

d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。

如果电梯向下运行,依照以下顺序确定下一目标楼层:

a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。

b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。

c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 3.最快响应策略:

响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。

可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,先向下,再向上,最后再向下运行。

本文来源:https://www.bwwdw.com/article/9gvi.html

Top