欢迎来到亿赛范文网!

关于程序设计课程设计报告书【四篇】

时间:2024-01-15 15:12:02 来源:网友投稿

下面是小编为大家整理的关于程序设计课程设计报告书【四篇】,供大家参考。希望对大家写作有帮助!

关于程序设计课程设计报告书【四篇】

程序设计课程设计报告书4篇

【篇一】程序设计课程设计报告书

吉首大学

课程设计说明书

课程名称:
C语言程序设计

题目名称:
使用C语言实现画图功能

学 院:
XXXXXXXXXXX

专业班级:
XXXX 专业XXXX 级 XX 班

姓 名:
XX XXX

学 号:
XXXXXXXXX XXXXXXXXXXX

指导教师:
XXX

评定成绩:

指导老师签名:

20 XX 年 XX月 XX 日


1、题目名称

使用C语言实现画图功能

二、选题背景

吉首大学大一计算机期末作业

三、设计目标

学习掌握C语言,利用C语言编程画出图像;

四、可行性分析

Microsoft Visual C++ 6.0简介

   Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

   虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。

   Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。

这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。

   根据以上对开发工具的功能的了解,我们相信,依靠Microsoft Visual C++ 6.0能开发出我们所期待的系统。因此,在开发工具方面是可行的。

五、需求分析

一.功能需求(完成的功能)

能够运行VC6的计算机设备。

二.环境需求(硬件、软件)

Win7操作系统,vc6软件,EasyX_v20120603(beta)。

六、系统分析与设计

#include

#include

#include

#include

#include

#define D 150

#define TOTAL 200

#define PI 3.14159

void APPLE()

{

setlinestyle(PS_SOLID,NULL,10);

int x,y,r,a,b,n;

float jiao;

a=480;b=300;r=40;n=0;

for(jiao=0;jiao

【篇二】程序设计课程设计报告书

Linux网络编程

课程设计报告

第一章 题目分析 1

第二章 设计文档 3

第三章 关键技术分析 7

第四章 系统界面 13

第五章 源代码 14


第一章题目分析

实现一个并发、IO复用的守护进程时间服务器,要求当客户端向服务器发送“what’s time?”字符串时,服务器回应当时的系统时间字符串。

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。

守护进程脱离终端的主要原因有两点:用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。

要注意守护进程与后台运行程序(即加&启动的程序)的区别。

在系统启动时由系统初始化脚本启动,这些脚本一般在/etc或/etc/rc开头的目录。如inet超级服务器,web服务器等;

许多网络服务器是由inet超级服务器启动的,如Telnetd、FTP等;

cron守护进程按一定的规则执行一些程序,由它启动的程序也以守护进程的方式运行。

守护进程可以在用户终端上启动,这是测试守护进程或重新启动守护进程常用的方法。

由于守护进程没有控制终端,在发生问题时它要用一些其它方式以输出消息。

可以通过向文件里写数据来输出消息,但这样不好管理。(因为每一个守护进程要对应一个文件)。

一般用syslogd守护进程来登记出错信息。


用户守护进程登记出错信息创建一个Unix域数据报套接口,并向syslogd守护进程绑定的路径名发送我们的消息,我们就能从自己的守护进程向syslogd发送登记信息。

可以创建一个UDP套接口,将日志消息发到回馈地址及端口号514(syslog服务使用的端口号);

更简单的方法是利用syslog函数。syslog函数是输出这些消息的标准方式,它将消息发往syslogd守护进程。


第二章 设计文档

2.1 进程组
   每个进程有一个唯一的进程组ID。进程组ID类似于进程ID--它是一个正整数,并可存放在pid_t数据类型中。
   每个进程组有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID,进程组组长可以创建一个进程组,创建该组中的进程,然后终止,只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。从进程组创建开始到其中最后一个进程离开为止的时间区间称为进程组的生命期。某个进程组中的最后一个进程可以终止,也可以参加另一进程组。

进程调用setgid可以参加一个现存的组或者创建一个新进程组(setsid也可以创建一个新的进程组,后面将用到)。
   2.2 会话期
   会话期(session)是一个或多个进程组的集合。其中,在一个会话期中有3个进程组,通常是由shell的管道线将几个进程编成一组的。
   2.3 会话期和进程组的一些特性:
   一个会话期可以有一个单独的控制终端(controlling terminal),这一般是我们在其上登录的终端设备(终端登录)或伪终端设备(网络登录),但这个控制终端并不是必需的。
   建立与控制终端连接的会话期首进程,被称之为控制进程(contronlling process)。一个会话期中的几个进程组可被分为一个前台进程组(foreground process group)以及一个或几个后台进程组(background process group)。
   假如一个会话期有一个控制终端,则它有一个前台进程组,其他进程组为后台进程组。无论何时键入中断键(通常是delete或ctrl-c)或退出键(通常是ctrl-),就会造成将中断信号或退出信号送至前台进程组的所有进程。
   
   2.4. 守护进程的编程规则



  

2.5 脱离控制终端,登录会话和进程组
   登录会话可以包含多个进程组,这些进程组共享一个控制终端,这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继续下来的。我们的目的就是要摆脱它们,使之不受它们的影响。
   其方法是在fork()的基础上,调用setsid()使进程成为会话组长。调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离,由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
   setsid()实现了以下效果:
   (a) 成为新对话期的首进程
   (b) 成为一个新进程组的首进程
   (c) 没有控制终端。
   2.6禁止进程重新打开控制终端
   现在,进程已经成为无终端的会话组长,但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端,再fork()一次。
   2.7关闭打开的文件描述符
   进程从创建它的父进程那里继续了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在地文件系统无法卸下以及无法预料的错误。一般来说, 必要的是关闭0、1、2三个文件描述符,即标准输入、标准输出、标准错误。因为我们一般希望守护进程自己有一套信息输出、输入的体系,而不是把所有的东西都发送到终端屏幕上。
   方法:
close(文件描述符)。
   2.8 改变当前工作目录
   将当前工作目录更改为根目录。从父进程继续过来的当前工作目录可能在一个装配的文件系统中。因为守护进程通常在系统重启之前是一直存在的,所以假如守护进程的当前工作目录在一个装配文件系统中,那么该文件系统就不能被拆卸。



   另外,某些守护进程可能会把当前工作目录更改到某个指定位置,在此位置做它们的工作。例如,行式打印机假脱机守护进程经常将其工作目录更改到它们的spool目录上。
   方法:
chdir("目录");

   2.9 重设文件创建掩码
   将文件方式创建屏蔽字设置为0:umask(0)。

由继续得来的文件方式创建的屏蔽字可能会拒绝设置某些许可权。例如,若守护进程要创建一个组可读、写的文件,而继续的文件方式创建屏蔽字,屏蔽了这两种许可权,则所要求的组可读、写就不能起作用。
   3.0 处理SIGCHLD信号
   处理SIGCHLD信号并不是必须的。但对于某些进程, 非凡是服务器进程往往在请求到来时fork子进程出来处理请求。假如父进程不等待子进程结束,子进程将成为僵尸进程(zombie)而仍占用系统资源。假如父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在系统V下可以简单地将SIGCHLD信号的操作设为SIG_IGN:
   signal(SIGCHLD,SIG_IGN);
   这样,内核在子进程结束时不会产生僵尸进程,这一点与BSD4不同,在BSD4下必须显示等待子进程结束才能释放僵尸进程。
   


第三章 关键技术分析

1.1进程定义

进程是程序在计算机上的执行活动,是一个运行着一个或多个线程的地址空间和这些线程所需要的系统资源,其中包括程序代码、数据、变量、打开文件的文件描述符、和环境。

1.2进程的五种状态

在五状态进程模型中,进程状态被分成下列五种状态。进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创建状态和退出状态描述进程创建的过程和进程退出的过程。

1)运行状态(Running):进程占用处理器资源;
处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。

2)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;
只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;
当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。

3)阻塞状态(Blocked):当进程由于等待I/O操作或进程同步等条件而暂停运行时,它处于阻塞状态。

4)创建状态(New):进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源、加载程序并建立地址空间表等。


5)退出状态(Exit):进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。

进程三种状态的转换如图所示:

1.3 进程的结构

Linux系统是一个多进程的系统,进程间有并行性、互不干扰等特点。通俗的说进程间是分离的任务,拥有各自的权力和责任,每个进程运行在各自独立的虚拟地址空间,一个进程发生了异常,它也不会影响到系统中的其他进程。

Linux进程包含三个段:数据段、代码段、堆栈段。

数据段:存放的是全局变量、常数、static 定义的静态变量和动态分配的数据(malloc函数取得的空间)等。

代码段:存放的是程序代码的数据。

堆栈段:存放的是子程序的返回地址、子程序的参数以及程序的局部变量。

1.4 进程的执行模式

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。在内核模式下运行的进程可以执行机器的特权指令,并且此时该进程的运行不受用户的干扰,即使是root用户也不能干扰内核模式下程序的运行。

进程上下文和中断上下文

处理器总处于以下状态中的一种:

1、内核态,运行于进程上下文,内核代表进程运行于内核空间;

2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;

3、用户态,运行于用户空间。

1.4 创建新进程

通过fork调用创建一个新进程,这个系统调用复制当前进程在系统表中创建一个新的表项,新表项中的许多属性与当前进程是相同的。新进程与原进程几乎一样,但还是有不同之处。父子进程的异同:


继承属性

差异

真实的用户ID和组ID,有效用户ID和组ID

进程组ID

SESSION ID

所打开文件及文件的偏移量

控制终端

设置用户ID和设置组ID标记位

根目录与当前工作目录

文件缺省创建的权限掩码

可访问的内存段

环境变量及其他资源分配

进程ID

父进程ID

子进程运行的时间记录

父进程对文件的锁

fork 和 exec函数族结合在一起使用就是创建新进程所需要的一切了,值得注意的是exec函数执行之后原进程之后的代码将不会被执行。

创建一个新进程也可以使用vfork,但vfork并不完全拷贝父进程的数据段而是和父进程共享数据段。这是因为vfork函数是与exec函数族相连,创建执行另一个程序的新进程。并且调用vfork对于父子进程的执行次序有限制,调用vfork时,父进程被挂起,子进程运行至调用exec函数族或调用exit时解除这种状态。而fork是不会阻塞调用进程的,父子进程的执行顺序是不确定的。

1.5 僵尸进程

一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程。僵尸进程过多会严重占用系统的进程ID号,从而导致整个系统不能工作。


僵尸进程的避免

1)父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。

2)如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。

3)如果父进程不关心子进程什么时候结束,可用signal(SIGCHLD, SIG_IGN)通知内核,那么子进程结束后,内核会回收,并不再给父进程发送信号。

4)还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。

1.5 等待进程

处理多进程时,经常用到有关进程间等待的操作,进程等待可以是父进程等待子进程也可以是进程组成员间的等待。进程等待常用的系统调用是wait和waitpid。

pid_t wai(int *status); 调用专用于等待一个子进程,调用wait的时候,调用者父进程将被挂起,直到该进程的一个子进程结束时,该调用返回。如果调用没有子进程,则错误返回,调用成功,如果status指针不为空,那么被等待退出的进程的状态信息将被写入status所指向的位置,调用失败时,返回-1。

pid_t waitpid(pid_t pid, int *status, int options); 该调用比wait灵活一些,可以用来等待制定进程,且可以使进程不挂起而立刻返回。参数pid用于指定要等待的进程,参数status类似wait系统调用参数的作用,参数options则用于改变waitpid的行为,比如选项WNOHANG,它的作用是防止waitpid调用将调用者的执行挂起。可以使用该选项检查某个特定子进程是否退出。如果子进程没有结束或意外终止,它返回0,否则返回child_pid,如果waitpid失败,它将返回-1,并设置errno。失败的情况可能是:没有子进程(errno设置为ECHILD)、调用被某个信号中断(EINTR)或选项参数无效(EINVAL)。


头文件sys/wait.h 文件中定义的宏可以解释程序退出的原因,如:

WIFEXITED(stat_val) 如果子进程正常结束,它就取一个非零值。

WEXITSTATUS(stat_val) 如果WIFEXITED非零,它返回子进程的退出码。

1.6 终止进程

可以使用exit(int status)或_exit(int status)系统调用来终止进程,当程序执行到exit和_exit时,进程会无条件的停止所有操作,清理包括PCB在内的各种数据结构,并终止调用进程的运行exit(int status)函数与_exit(int status)函数的最大区别就在于,exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区里的内容写回到文件中。参数status可以传递进程结束时的状态,0表示正常结束,其他数值表示出现了错误,进程非正常结束,在实际编程中,可以用wait系统调用接受子进程的返回值,从而针对不同情况进程不同处理。


第四章 系统界面


第五章 源代码

【篇三】程序设计课程设计报告书



成都信息工程学院
课程设计报告


课程名称:J2EE程序设计题目名称:简单微博系统学生学号:2009121097学生姓名:邓涛


技术报告(20分)程序及运行(60分)答辩(20分)
设计评语:

总分



一、程序功能模块划分
1.系统功能模块框图
简单微博系统
用户注册模块用户登陆模块好友管理模块粉丝查看模块微博管理模块
添加好友模块查看好友模块删除好友模块广播微博模块删除微博模块
图1系统功能模块框图
2.各功能的具体实现内容
1用户注册模块:用户输入的注册信息包括,用户名、用户密码、用户真实
姓名、手机号、Email、QQ号码。在用户注册模块要求检查用户名是否已存在,检查输入Email是否存在,如果存在则不让用户注册。2用户登陆模块:用户打开登陆模块,要求用户输入用户注册的用户名以
及对应密码,用户密码验证成功,则加载用户的相关信息,包括用户的好友列表,粉丝列表,已广播微博信息以及关注好友发送的微博信息。3好友管理模块:该模块登陆用户可以查看到自己已添加的好友列表,添
加新注册用户为自己的好友,删除自己已添加的好友。


4粉丝查看模块:登陆用户可以通过该模块看到自己的粉丝列表(即将当
前用户添加为好友的用户列表)。
5微博管理模块:登录用户可以使用该模块查看自己以广播的微博信息,
并对广播的微博信息删除,查看好友广播的微博信息。
二、功能实现流程图
1.系统主功能
开始
用户登陆
验证失败
验证用
户密码
用户注册
用户名不存在注册成功
用户名是否存在
已存在
验证通过
添加好友删除好友查看粉丝列表广播微博查看好友微博注销登陆
结束
图2系统主功能实现流程图


2.异步刷新好友微博信息功能
用户登陆成功
开始一个每隔time时间执行一次
window.setInterval(function(,time
加载用户信息
好友微博列表

访问服务器,检查好友是否发送新微博
有好友微博更新追加到好友微博列表中
图3异步刷新的方式显示最新的好友发布的微博信息功能实现流程图
三、数据库设计
1.数据库E-R图
图4数据库E-R图


2.数据库表设计1表名:_user
2说明:存储用户的基本信息3表结构
表1_user表结构设计
字段名idnamepasswordreg_datefan_num
类型intvarcharvarchardatetimeint
长度主外键4515045204545
PK
可否为空备注
notnull用户id,自增notnull用户登录名notnull用户密码密文nullnullnullnullnull
用户注册日期用户粉丝数量用户信息修改日期真实姓名用户手机号
edite_datedatetimereal_namevarcharcell_phonevarcharemailqq_num
varcharvarchar
notnull用户Email地址null
用户QQ号
1表名:_friend
2说明:存储用户的好友信息3表结构
表2_friend表结构设计
字段名iduseridfriendid
类型intintint
长度主外键
PKFK
可否为空备注
notnull记录id,自增notnull用户的ID号notnull所加好友的ID号


1表名:_blog
2说明:存储用户发送的微博信息3表结构
表2_blog表结构设计
字段名idtypecontent
类型intintvarchar
长度500
主外键可否为空备注PKFK
notnull微博id,自增notnull1文字,2图片微博notnull微博内容nullnull
微博发布时间图片URL
publishe_datedatetimeimageuserid
varcharint
200
notnull用户ID
四、程序设计
1.程序分层设计结构图
HTML表示层
JSON
AJAX
Struts2Action访问控制层
SpringAOP事
务管理
SpringIOC(DI
Java代码业务逻辑处理
Hibernate持久持层

图5程序分层设计结构图


2.所使用框架的配置过程
1.Struts2的配置
a.用过Myeclipse的为工程添加StrutsCapabilities,选择Struts版本2.2如下图,web即完成struts2的filter以及struts.xml文件的相关配置

需要为工程添加action在struts.xml中进行相关配置。2.Hibernate配置
a.用过Myeclipse的为工程添加HibernateCapabilities,不添加
Hibernate.cfg.xml文件,也不需要HibernateSessionFactory(后面和Spring集成,不需要这个配置文件了。
b.通过HibernateReverseEngineering生成Hibernate与数据库的映射文件以及Model。3.Spring配置
a.同样为工程添加SpringCapabilities,在web.xml添加context-param传递参数contextConfigLocation把值设置为Spring的配置文件地址。同时设置Spring的listener如下图



完成配置后工程结构如下图:

在包cn.edu.cuit.dida.miniblog.hibernate下面存放Hibernate的映射文件在包cn.edu.cuit.dida.miniblog.spring存放Spring的DI相关的配置信息在包config.spring包中配置了数据源以及SessionFactory的信息


3.功能实现的主要代码
1.JS用户好友微博信息实时刷新/**
*ajax加载好友的微博信息*/
functionloadFriendsBlogs({……
friendsBlogInterval=window.setInterval(function({$.ajax({
type:"POST",url:
"user/Blog_getFriendsNewBlogs?format=json&showedCount=0&requestCount=10&beginDate="+beginDate,
success:function(result{beginDate=result["updateDate"];if(result["blogs"].length>0{
for(vari=0,l=result["blogs"].length;
i

【篇四】程序设计课程设计报告书

重庆科技学院《C语言程序设计》课程设计报告

重庆科技学院

《C语言程序设计》
课程设计报告


学院:_电气与信息工程学院_专业班级:学生姓名:学号:设计地点(单位)________计算机自主学习中心__________设计题目:________商品订购系统设计____________完成日期:2012年1月13日
指导教师评语:_______________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):________________
指导教师(签字):________________


1

重庆科技学院《C语言程序设计》课程设计报告
摘要
通过本软件的学习、编译。可以很好的掌握程序中结构体的运用、界面的使用等,以及更熟练的掌握了使用fprintf与fscanf向文件读写一组数据。可以完全的、熟练的、掌握、运用switch语句来实现多分支选择结构。同时,使用、学习者也能够学习、知道程序的许多细节问题通过每个函数模块模式。以上这些的学习对今后的学习、编译程序,以及学习好程序设计课程都有很大的帮助。
关键词:结构体界面freadswitch语句
2

重庆科技学院《C语言程序设计》课程设计报告
课程设计任务书
设计题目:商品订购系统设计
学生姓名课程名称地点设计内容及要求

C语言程序设计课程设计专业班级计科11I305/I306
起止时间
2012年1月9日~1月13日
请你为校园某店铺设计一个商品订购系统,订购者能使用该系统在浏览了基本商品信息(货号、名称、厂家、产地、存量、单价)后设定商品订购信息产生一条订购记录(日期时间、货号、订购量、客户名、客户地址、客户号),商家根据客户的订购信息组织商品和发货。
【题目要求】
(1)商品的基本信息(货号、名称、厂家、产地、存量、单价等)要单独保存;
(2)商品的订购记录(日期时间、货号、订购量、客户名、客户地址、客户号);
(3)系统的各个功能模块要求用函数的形式实现;

(4)系统的功能模块应包含商品信息的增删改查,以及订购记录的查询和统计;
要求用C语言的文件操作语句将以上所有结果分别保存在文件goodsinfo.out,和bookrecordinfo.out中。
【输入/输出要求】
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;

(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
(3)建立一个小系统,至少包括10种产品能供顾客选择
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写
课程设计报告。设计
(1)系统分析、设计正确。参
数(2)结果以图表方式显示。
(3)界面简洁、美观。(4)报告格式规范。
进度要求周一:明确设计任务,学习相关基础知识
周二:熟悉各知识点,进行基础练习周三:根据题目要求,进行设计和实现周四:根据题目要求,进行设计和实现周五:撰写报告,进行答辩
3

重庆科技学院《C语言程序设计》课程设计报告
参[1]何钦铭颜晖.《C语言程序设计》.高等教育出版社.2008年考
资[2]谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年料
其难点提示:它首先分析题目的数据结构,看看要操作那些值;
然后根据题意设计操作对象的
结构。可以使用结构体来描述其中较为复杂的对象例如往来帐目;
确定结构体的定义;
可以使用数组来保存数据,使用结构体数组来保存各类数据。
说1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份明由负责教师留用。2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

4

重庆科技学院《C语言程序设计》课程设计报告

目录
摘要.....................................................................2

课程设计任务书............................................................3

1软件需求分析说明书.....................................................6

2系统设计与分析.........................................................7

2.1软件界面设计......................................................7

2.1.1第一模块界面及实现代码.......................................7

2.1.3第三模块的实现及代码........................................10

2.1.4第四模块的实现及代码........................................14

2.1.5第五模块的实现及代码........................................15

2.1.6第六模块的实现及代码........................................18

2.2软件的数据(结构)设计...........................................21

2.3软件的算法设计...................................................22

2.4数据结构分析.....................................................23

3设计体会与小结.........................................................24

致谢.....................................................................25

参考文献.................................................................26

附录1...................................................................27

5

重庆科技学院《C语言程序设计》课程设计报告

1软件需求分析说明书

本软件实现了商品信息的添加、删除、修改、搜索,以及显示商品的全部信息。使用者能够很好的查看商品信息,以及订购商品。
本软件的界面需要显示各个单一功能的目录,然后通过switch语句来实现各个单一功能的分支选择,把界面与函数联系起来。最终实现了,通过界面来达到软件的要求。

6

重庆科技学院《C语言程序设计》课程设计报告

2系统设计与分析

2.1软件界面设计
画出软件全部输入、输出数据的界面,并对每一个界面进行详细的操作说明;

2.1.1第一模块界面及实现代码
图如下:
图2.1主菜单的界面图其对应的函数如下:intmain(void{
inti;
wenbenload(;
do{system("cls";printf("\n\n\n\n\n\n";
printf("**************************欢迎使用商品订购系统v1.0******************************\n";
printf("作者:计科1102姚茂源\n";
printf("┏━━━━━━━━━━━━━━━━━━━┓\n";printf("┃1.浏览商品信息┃\n";printf("┃2.订购商品┃\n";printf("┃3.订单查询┃\n";

7


重庆科技学院《C语言程序设计》课程设计报告
printf("┃4.搜索商品┃\n";printf("┃5.管理菜单┃\n";printf("┃0.退出系统┃\n";printf("┗━━━━━━━━━━━━━━━━━━━┛\n";printf("********************************************************************************\n";
printf("\n\n\t\t请输入你的操作(0~5:";scanf("%d",&i;switch(i{case1:system("cls";scanproduct(;break;case2:system("cls";dinggou(;break;case3:system("cls";lookdinggou(;break;case4:searchproduct(;break;case5:secondmain(;break;case0://退出系统的界面system("cls";printf("\n\n\n\n\n\n\n\n";
printf("\n\n\t\t\t欢迎使用本系统\n\n\n\n\n\t\t\t欢迎再次使用\n";exit(0;//exit用于随时结束程序}}while(1;
return0;}
其中的wenbenload(用于从文本中导入商品信息。如文本不存在则出现下图
8

重庆科技学院《C语言程序设计》课程设计报告
图2.2商品信息文本不存在的界面图

2.1.2第二模块的界面及实现代码
如果选择的操作是主界面的1时,而产品文件为建立时会显示下图:

图2.3第二模块界面图
该程序的实现是通过以下代码实现的:

9

重庆科技学院《C语言程序设计》课程设计报告
voidscanproduct({
inti;
system("cls";
printf("\t\t\t\t\t商品信息列表\n";
for(i=0;i=b[ibuy].bmany{
a[t].stock=a[t].stock-b[ibuy].bmany;//顾客购
12


重庆科技学院《C语言程序设计》课程设计报告
买后商品的库存计算
printf("\n\t\t\t日期时间:";fflush(stdin;
scanf("%d",&b[ibuy].btime;printf("\n\t\t\t客户名:";fflush(stdin;
gets(b[ibuy].bname;
printf("\n\t\t\t客户地址:";fflush(stdin;
gets(b[ibuy].baddress;printf("\n\t\t\t客户号:";b[ibuy].bnumber=bgnumber;
printf("%d\n",b[ibuy].bnumber;bgnumber++;ibuy++;m++;
printf("\n\n\n\t\t\t\t";system("pause";}else{
printf("\n\n\t\t\t订购数目超出库存\n";printf("\t\t\t";system("pause";}
}
//若没有商品的提示及操作else{
printf("\n\n\t\t\t查无此货\n";
printf("\t\t\t";system("pause";}
case2:
printf("是否继续输入订购?(Y/N";fflush(stdin;scanf("%c",&ch;
if(ch=="N"||ch=="n"{
c=0;

13

重庆科技学院《C语言程序设计》课程设计报告
break;}
elseif(ch=="Y"||ch=="y"{
c=0;n=1;break;}
elseif(ch!="n"||ch!="N"||ch!="Y"||ch!="y"{
n=0;c=1;break;}
case0:
if(c==1{
n=2;}}
}while(ch!="n"&&ch!="N";system("cls";
return;}
2.1.4第四模块的实现及代码
在主菜单中选择3进入商品订购界面,界面如下:
14

重庆科技学院《C语言程序设计》课程设计报告
图2.6订单查询界面该程序实现代码如下:voidlookdinggou({
inti;
system("cls";
printf("\t\t\t\t\t订单列表\n";for(i=0;i

推荐访问:报告书 程序设计 课程设计 关于程序设计课程设计报告书【四篇】 程序设计课程设计报告书 程序设计课程设计报告书怎么写

热门文章