学生课程设计设计案例.docx
- 文档编号:9376613
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:56
- 大小:90.86KB
学生课程设计设计案例.docx
《学生课程设计设计案例.docx》由会员分享,可在线阅读,更多相关《学生课程设计设计案例.docx(56页珍藏版)》请在冰豆网上搜索。
学生课程设计设计案例
学生课程设计设计案例
编写程序实现对学生四门课程的考试成绩进行管理的功能。
其功能包括:
1.增加学生成绩记录
2.修改学生成绩记录
3.删除学生成绩记录
4.学生成绩记录列表
5.成绩记录写入文件
6.学生成绩记录文件读取
7.按学号排序和按名称搜索。
程序界面要求:
仿windows窗口风格以菜单方式驱动,并每个功能都在字符窗口中实现。
题目分析:
程序的几个需要考虑的问题:
1、一个实用的应用程序必须提供一个相对比较简单、清晰的操作界面。
目前大多数在windows中实现的应用系统都可以借助其开发接口很简单的产生标准的窗口界面。
然而这样的界面风格在Dos中实现并非一件简单的任务,我们必须清晰的规划出屏幕和窗口的规格以及和应用结合的接口。
2、我们面临的应用程序不是简单的实现一个算法的程序,是一个针对学生成绩记录的多功能的小型系统,而且扩充的可能性非常大,需要我们按照自顶向下,逐步求精的设计思想先从功能上将系统划分为多个模块,再从模块细节来把握和分解系统,降低其复杂度直至可以编写程序。
3、程序完成的是对学生成绩记录的多种独立的操作,需要进行功能规划。
总体上划分为三个功能部分:
(1)文件接口功能部分:
完成学生成绩记录的文件读取和写入。
(2)学生记录的操作功能:
完成向记录集添加成绩记录、删除成绩记录、修改成绩记录等功能。
(3)察看学生记录,完成学生成绩记录集的排序、搜索、列表等功能。
4、界面组成设计分析:
(1)整个屏幕用背景覆盖,称为桌面
(2)屏幕最顶一行用于显示主菜单行。
(3)最底一行用于显示提示行。
(4)子菜单由菜单盒显示。
(5)单一的输入,使用单行输入框。
(6)提示信息使用信息提示框显示。
(7)记录信息的输入使用录入框实现。
结构分析
1、功能模块的划分:
划分的情况见下图
2、软件运行模式:
软件的运行采用菜单驱动,选取菜单项后,启动相关功能,进入每个功能后,都通过独立的窗口执行相应流程。
功能执行退出后,由主菜单继续获得控制权。
3、程序单元结构设计:
序号
单元名称
单元头文件
单元实现文件
单元说明
1
stmain
stmain.h
stmain.c
全局变量的定义和main主控函数,菜单及模块调度执行函数
2
student
student.h
student.c
学生成绩结构定义和记录基本运算函数
3
basefile
basefile.h
basefile.c
学生成绩结构的文件接口函数
4
basemenu
basemenu.h
basemenu.c
菜单的构造、控制基础功能函数
5
basewin
basewin.h
basewin.c
所有类型界面及其窗口绘制控制函数
6
menudo
menudo.h
menudo.c
对应菜单项直接驱动的功能模块函数
4、各单元主要数据结构、全局变量与处理函数:
(1)stmain单元
名称
类型
原型
说明
studentcount
全局变量
intstudentcount=0;
当前学生记录的个数
studentarr
全局变量
STUDENTstudentarr[200];
存储当前学生成绩记录的总缓冲区,实际记录的个数在变量studentcount中
winbuf
全局变量
charwinbuf[4096];
保存在桌面中的画面区域的缓冲区
menuareabuf
全局变量
charmenuareabuf[3][4096];
保存子菜单画面区域的缓冲区
menu
全局变量
MENUITEMNODE*menu;
第一项菜单结构节点的指针
pcurrent
全局变量
MENUITEMNODE*pcurrent;
当前菜单结构节点的指针
selectedid
全局变量
intselectedid;
当前菜单项选取后的返回id
initmenu
函数
intinitmenu(void);
构造系统菜单结构的函数
dealselect
函数
intdealselect(void);
依据selectedid,执行模块调度的函数
(2)student单元
名称
类型
原型
说明
STUDENT
学生成绩结构类型
typedefstruct_student{
charstid[20];
charname[20];
floatmathscore;
floatenglishscore;
floatcomputerscore;
floatpoliticsscore;
}STUDENT;
学生成绩的结构类型,是系统数据处理的基础
addstudent
函数
voidaddstudent(
STUDENT*pliststudent,
intstcount,
STUDENT*pstudent
);
向pliststudent结构数组中添加一个学生记录pstudent,结构数组中有效记录个数通过stcount传递
findstudent
函数
STUDENT*findstudent(
STUDENT*pliststudent,
intstcount,
char*stid
);
在pliststudent结构数组中查找学号为stid的记录,结构数组有效记录个数通过stcount传递。
返回查找的结果,成功返回找到记录的指针,失败返回NULL
modifystudent
函数
voidmodifystudent(
STUDENT*pliststudent,
intstcount,
char*stid,
STUDENT*newpstudent
);
将pliststudent结构数组中学号为stid的记录,替换为新记录newpstudent。
结构数组有效记录个数通过stcount传递。
deletestudent
函数
voiddeletestudent(
STUDENT*pliststudent,
intstcount,
char*stid
);
将pliststudent结构数组中学号为stid的记录删除掉。
结构数组有效记录个数通过stcount传递。
(3)basefile单元
名称
类型
原型
说明
readfiletobuf
函数
intreadfiletobuf(
char*readfilename,
STUDENT*pliststudent,
int*readcount
);
从结构文件readfilename中读取学生成绩结构到结构数组pliststudent中,读取的记录个数通过变量readcount输出
writebuftofile
函数
intwritebuftofile(
char*writefilename,
STUDENT*pliststudent,
intstcount
);
将结构数组pliststudent中的学生成绩记录写入结构文件writefilename,写入记录的个数在变量stcount中
(4)basemenu单元
名称
类型
原型
说明
MENUITEMREC
菜单项结构类型
typedefstructmenuitemrec{
intitemid;
charitemtext[20];
intlevel;
}MENUITEMREC;
itemid菜单项标识号
itemtext菜单项显示文本
level菜单项级别
MENUITEMNODE
PMENUITEMNODE
菜单项节点结构类型
菜单项节点结构指针类型
typedefstructmenuitemnode{
MENUITEMRECitem;
intx,y,w;
structmenuitemnode*pprev;
structmenuitemnode*pnext;
structmenuitemnode*pchild;
structmenuitemnode*pparent;
}
MENUITEMNODE,
*PMENUITEMNODE;
item菜单项信息
x,y菜单项屏幕位置
w菜单项宽度
pprev前项指针
pnext后项指针
pchild子菜首项指针
pparent父级菜单项指针
makemenuitem
函数
MENUITEMNODE*makemenuitem(
intid,
char*text,
intlevel
);
构造菜单项记录并返回其指针
id:
设置的菜单项标号
text:
设置的菜单项文字
level:
菜单项级别
addnext
函数
MENUITEMNODE*addnext(
MENUITEMNODE*current,
MENUITEMNODE*next
);
向当前菜单节点current中加入同级别相邻下一个节点next
addchild
函数
MENUITEMNODE*addchild(
MENUITEMNODE*current,
MENUITEMNODE*child
);
向当前菜单节点current中加入下一级第一节点child
initmenuposition
函数
voidinitmenuposition(
MENUITEMNODE*menu
);
初始化菜单中menu所有节点菜单项的屏幕位置和宽度
showmenu
函数
voidshowmenu(
MENUITEMNODE*menuptr
);
显示主菜单条menuptr在屏幕顶行,并激活第一项菜单
menuselect
函数
intmenuselect(void);
激活菜单控制,返回选择的菜单项的标识号
(5)basewin单元
名称
类型
原型
说明
editbox
编辑框结构类型
typedefstruct_EDITBOX{
char*label;
intx,y;
intlabelwidth;
inteditwidth;
editstyleedittype;
char*strptr;
float*floatptr;
}editbox;
自定义控制编辑框输入文本,转换存到字符串或实数中的结构
label:
显示的提示信息
x,y:
编辑框的屏幕位置
labelwidth:
提示显示的宽度
editwidth:
编辑框的宽度
edittype:
编辑目标的类型
strptr:
编辑字符串存入的目标
floatptr:
编辑实数存入的目标
pusharea
函数
voidpusharea(
intleft,
inttop,
intw,
inth,
char*buf
);
保存一个矩形屏幕区域到缓冲区buf中,保存区域的左上角为(left,top),宽高为w,h,
poparea
函数
voidpoparea(
intleft,
inttop,
intw,
inth,
char*buf
);
恢复保存的缓冲区buf到一个矩形屏幕区域,恢复左上角为(left,top),宽高为w,h
drawdesktop
函数
voiddrawdesktop(void);
绘制桌面区域
msg
函数
intmessagebox(
char*msg
);
在屏幕中显示一个消息框
msg:
要显示的消息字符串
inputbox
函数
intinputbox(
char*lable,
char*savestr
);
输入单行字符串的输入窗口
label:
提示字符串
savestr:
输入后保存的目标字符串
inputeditbox
函数
intinputeditbox(
editbox*ebptr,
intinputcount
);
用于在编辑窗口中控制多栏编辑输入
ebptr:
多栏编辑结构指针
inputcount:
输入栏位的数量
getkey
函数
intgetkey(void);
得到键盘的输入,包括功能键及组合键
返回按键的键值
inputstudent
函数
intinputstudent(
STUDENT*ptrst
);
在多栏输入框中编辑学生成绩记录
ptrst:
学生成绩记录指针
(6)menudo单元
名称
类型
原型
说明
loadstudent
函数
voidloadstudent(void);
执行从输入的文件名中调入学生成绩记录到全局数组的模块函数
writestudent
函数
voidwritestudent(void);
执行将学生成绩记录全局数组写入输入的文件名的模块函数
liststudent
函数
voidliststudent(void);
执行将学生成绩记录全局数组进行窗口列表显示的控制模块函数
appendstudent
函数
voidappendstudent(void);
执行添加学生成绩并编辑和记录到全局数组的模块函数
editstudent
函数
voideditstudent(void);
执行编辑修改指定学号的学生成绩记录的模块函数
erasestudent
函数
voiderasestudent(void);
执行删除指定学号的学生成绩记录的模块函数
5、工程文件:
建立工程文件STMAN.PRJ,该文件支持对单元的集成编译和连接。
下图显示了工程文件窗口的主要的屏幕画面。
STMAN工程文件同各个单元源文件之间的关系如下:
源程序:
1、stmain单元头文件stmain.h源程序
#ifndef_STMAIN_H
#define_STMAIN_H
#include"student.h"
#include"basemenu.h"
STUDENTstudentarr[200];
intstudentcount=0;
charwinbuf[4096];
charmenuareabuf[3][4096];
MENUITEMNODE*menu,*pcurrent;
intselectedid;
intinitmenu(void);
intdealselect(void);
#endif
2、stmain单元实现文件stmain.c源程序
#include"basemenu.h"
#include"basewin.h"
#include"menudo.h"
#include"stmain.h"
#include
#include
#include
voidmain()
{
intkey;
clrscr();
drawdesktop();
initmenu();
showmenu(menu);
while((selectedid=menuselect())!
=QUITID)
dealselect();
setdefaultcolor();
clrscr();
}
intinitmenu(void)
{
menu=addnext(
addchild(makemenuitem(1,"File",0),
addnext(makemenuitem(101,"Load",1),
addnext(makemenuitem(102,"Save",1),
makemenuitem(0,"Quit",1)
))
),
addnext(
addchild(makemenuitem(2,"Edit",0),
addnext(makemenuitem(201,"Add",1),
addnext(makemenuitem(202,"Edit",1),
makemenuitem(203,"Delete",1)
))
),
addchild(makemenuitem(3,"View",0),
addnext(makemenuitem(301,"Sort",1),
addnext(makemenuitem(302,"Search",1),
makemenuitem(303,"List",1)
))
)
)
);
initmenuposition(menu);
pcurrent=menu;
return0;
}
intdealselect(void)
{
switch(selectedid)
{
case101:
//Load
loadstudent();
break;
case102:
//Save
writestudent();
break;
case201:
//Add
appendstudent();
break;
case202:
//Edit
editstudent();
break;
case203:
//Delete
erasestudent();
break;
case301:
//Sort
break;
case302:
//Search
break;
case303:
//List
liststudent();
break;
}
return0;
}
3、student单元头文件student.h源程序
#ifndef_STUDENT_H
#define_STUDENT_H
typedefstruct_student{
charstid[20];
charname[20];
floatmathscore;
floatenglishscore;
floatcomputerscore;
floatpoliticsscore;
}STUDENT;
voidaddstudent(STUDENT*pliststudent,intstcount,STUDENT*pstudent);
STUDENT*findstudent(STUDENT*pliststudent,intstcount,char*stid);
voidmodifystudent(STUDENT*pliststudent,intstcount,
char*stid,STUDENT*newpstudent);
voiddeletestudent(STUDENT*pliststudent,intstcount,char*stid);
#endif
4、student单元实现文件student.c源程序
#include"student.h"
#include
#include
voidaddstudent(STUDENT*pliststudent,intstcount,STUDENT*pstudent)
{
pliststudent[stcount]=*pstudent;
}
STUDENT*findstudent(STUDENT*pliststudent,intstcount,char*stid)
{
inti;
STUDENT*stptr;
stptr=pliststudent;
for(i=0;i { if(strcmp(stptr->stid,stid)==0) returnstptr; stptr++; } returnNULL; } voidmodifystudent(STUDENT*pliststudent,intstcount, char*stid,STUDENT*newpstudent) { STUDENT*stptr; if((stptr=findstudent(pliststudent,stcount,stid))==NULL)return; *stptr=*newpstudent; } voiddeletestudent(STUDENT*pliststudent,intstcount,char*stid) { STUDENT*stptr; STUDENT*nextstptr; intcopycount; inti; if((stptr=findstudent(pliststudent,stcount,stid))==NULL) return; nextstptr=stptr; nextstptr++; copycount=stcount-(stptr-pliststudent)-1; for(i=copycount;i>0;i--) { *stptr=*nextstptr; nextstptr++; } } 5、basefile单元头文件basefile.h源程序 #ifndef_BASEFILE_H #define_BASEFILE_H #include"student.h" intreadfiletobuf(char*readfilename,STUDENT*pliststudent,int*readcount); intwritebuftofile(char*writefilename,STUDENT*pliststudent,intstcount); #endif 6、basefile单元实现文件basefile.c源程序 #in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 课程设计 设计 案例