计算机科学与技术系课程设计报告20 ~20 学年第学期课程C语言课程设计课程设计名称班级班费管理系统学生姓名学号专业班级指导教师20 年月班级班费管理系统目录班级班费管理系统 (2)目录 (2)一、需求分析 (3)二、算法设计 (4)(一)设计思想 (4)1.程序结构(流程图) (4)2. 重要的数据结构 (5)3. 主要算法思想 (5)(二)设计表示 (5)(三)实现注释 (7)(四)算法设计中一些新的想法 (7)三、用户手册 (7)四、调试及测试 (8)五、小结 (8)六、参考文献 (9)附录 (9)测试数据 (9)一、需求分析本程序是班级班费管理系统,主要作用是帮助管理班级班费事务,以月份的形式管理班级班费账目,包括班费支出的时间、经手人、金额和原因。
要求具有备忘录班级班费管理和班费信息查看的功能。
其中班级班费管理包括班费支出增加和删除功能。
班费信息查看包括按月份查看和整体查看。
要求具有备忘录班级班费管理和班费信息查看的功能。
其中班级班费管理包括班费支出增加和删除功能。
班费信息查看包括按月份查看和整体查看。
程序设计需要运用面向过程的程序设计方法,要求选择动态数组,任务中要运用对文件进行读写操作。
根据要求,本程序提供的基本管理功能有:(一)添加:即增加一条班费支出到班费项目中;(二)显示:即在屏幕上显示所有班费支出中的信息。
(三)存储:即将班费支出信息保存在一个文件中。
(四)装入:即将文件中的信息读入程序。
(五)查询:可根据月份查找班费支出信息,若找到,显示在屏幕上。
(六)删除:可删除某月份的班费支出信息。
二、算法设计(一)设计思想1.程序结构(流程图)2. 重要的数据结构typedef struct ClassFee{int month; // 月份float money; //每月班费金额char people[20]; //班费支出经手人char reason[100]; //班费支出原因}CF;3. 主要算法思想本程序主要运用面向过程的程序设计方法。
在界面制作中,运用开关语句switch,通过输入数字,选择主菜单下的子菜单项目,并运用库函数system(“cls”)和system(“pause”)进行清屏和暂停操作,使界面更加清晰美观。
在各个子菜单中,分别通过调用子函数的方式来进行班费支出的增加、删除和查询操作。
在增加、删除和查询函数中,运用结构体数组和文件操作,实现增加、删除和查询功能。
(二)设计表示模块一 void Menu():主菜单函数,是进入系统的第一界面,用来让用户选择进入管理员模式或普通用户模式或退出系统,用户通过输入选择的数字来调用各个子函数进入各个模式。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch以及调用子函数来实现功能。
模块二 void Land():管理员登陆函数,用来让管理员登陆系统,需要用户名和密码。
若用户名输入错误,则无法登陆,会返回主菜单。
若用户名输入正确,会继续被要求输入密码,这是调用到子函数int Key()。
若密码输入错误,则会被要求再次输入密码。
如果输入三次密码都是错误的,则无法再次输入密码,程序会提示“对不起!您已经错误输入三次,无法再次输入,按回车键返回主菜单。
”,界面返回主菜单。
若密码输入正确,会调转到子函数void Administrators()界面。
本函数运用开关语句switch以及调用子函数int Key()和void Administrators()来实现功能。
模块三 void Administrators():管理员模式函数,用来让管理员选择增加支出\或删除支出\或查询日志\或返回主菜单,用户通过输入选择的数字来调用各个子函数进入各个功能。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch以及调用子函数来实现功能。
模块四 void Users():普通用户模式函数,用来让普通用户选择查询日志或或返回主菜单,用户通过输入选择的数字来调用各个子函数进入各个功能。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch以及调用子函数来实现功能。
模块五 int Read():读取文件信息函数,用来读取文件"日志.txt"中共有多少条信息并返回信息总数目i。
本函数运用文件打开、读取和关闭操作以及结构体数组和指针来实现功能。
模块六 void Output():输出文件内容函数,用来输出文件"日志.txt"的内容。
本函数运用文件打开、读取、输出和关闭操作以及结构体数组和指针来实现功能。
模块七 void Choose():查询文件内容菜单函数,用来让普通用户选择按月查询或查询所有或返回主菜单,用户通过输入选择的数字来调用各个子函数进入各个功能。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch以及调用子函数来实现功能。
模块八 void Delete():删除文件内容函数,用来让管理员删除文件内容。
屏幕首先显示全部文件内容,然后显示“请输入你想要删除的月份:”,管理员输入数字,屏幕输出删除后的文件的全部内容,并将删除后的文件的全部内容打印到"更新后的日志.txt"。
之后,屏幕输出“请选择:1------返回上一级菜单 2------返回主菜单”,管理员输入数字,通过调用子函数void Administrators()和void Menu()来调转界面。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch、文件打开、读取、打印和关闭操作、结构体数组、指针以及调用子函数void Administrators()、int Read()和void Menu()来实现功能。
模块九 void Add():增加文件内容函数,用来让管理员增加文件内容。
屏幕首先显示“请输入你要增加的支出信息(请依次输入时间(月份)、经办人姓名、金额和原因)”,管理员输入相应内容,屏幕首先输出管理员增加的内容,然后输出增加后的文件的全部内容,并将增加后的文件的全部内容打印到"更新后的日志.txt"。
之后,屏幕输出“请选择:1------返回上一级菜单 2------返回主菜单”,管理员输入数字,通过调用子函数void Administrators()和void Menu()来调转界面。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch、文件打开、读取、打印和关闭操作、结构体数组、指针以及调用子函数void Administrators()、int Read()和void Menu()来实现功能。
模块十 void consult():按月查询文件内容函数,用来让管理员和普通用户按月查询文件内容。
屏幕首先显示“请输入你想要查询的月份:”,管理员和普通用户输入数字,屏幕输出该月的全部班费支出内容。
之后,屏幕输出“请选择:1------返回上一级菜单2------返回主菜单”,管理员和普通用户输入数字,通过调用子函数void Choose()和void Menu()来调转界面。
若输入错误,则会被要求重新输入。
本函数运用开关语句switch、文件打开、读取、打印和关闭操作、结构体数组、指针以及调用子函数void Choose()、int Read()和void Menu()来实现功能。
模块十一 int Key():密码函数,用来让管理员输入密码,使用数组实现密码以“*”号形式输出。
若输入的字符正确,则返回a=0;若输入的字符不正确,则返回a=1。
本函数运用字符串数组来实现功能。
模块十二 void main():本程序主函数。
(三)实现注释任务中各项要求基本实现。
在完成基本要求的基础上,本程序设计了管理员模式与普通用户模式。
在管理员模式中,设计了用户名和密码模块。
管理员必须输入正确的用户名,才能进一步输入密码,否则则无法进入管理员界面。
在密码模块,设计了以“*”号形式输出密码的方式,而若输入密码错误超过三次,就无法进入管理员界面。
而在各界面的调转方面,通过运用库函数system(“cls”)和system(“pause”)来实现清屏和暂停功能。
(四)算法设计中一些新的想法本程序可以使用链表。
链表可以将结构体、数组、指针等C语言的基本元素融合在一起,它最大的好处是可以非常方便地在链表中实现插入、删除节点操作。
本程序具有的增加、删除功能,正可以创建一个链表来实现这些功能。
而本程序采用结构体数组的方法,对于增加、删除功能编写的代码较为繁琐,不如链表的操作简洁方便。
但是,我对于链表操作不太熟练,把握不大,因此采用了结构体数组的方法。
在之后的学习中,我会加强对链表知识的学习,实现使用链表来编写本程序。
三、用户手册用户进入系统后,首先在主菜单界面选择要进入的模式:管理员模式或普通用户模式或退出,输入数字1或2或3,如果输入其他字符,则屏幕会输出“输入错误!请重新输入:”,并且调转回主菜单界面。
例如:输入1后,系统进入管理员登陆界面,用户需要输入用户名,如果用户名错误,则屏幕会输出“请输入您的用户名,按回车键结束:”,并且调转回主菜单界面。
如果用户名正确,则系统会继续要求用户输入密码。
如果密码错误,则屏幕会输出“密码错误!请重新输入:”,若输入密码错误三次,则屏幕会输出“对不起!您已经错误输入三次,无法再次输入,按回车键返回主菜单。
”,并且调转回主菜单界面。
如果密码正确,则会调转到管理员界面。
用户可以选择进入的功能:增加支出或删除支出或查询日志或返回主菜单,输入数字1或2或3或4,如果输入其他字符,则屏幕会输出“输入错误!请重新输入:”,并且调转回管理员界面。
例如:输入1后,屏幕显示“请输入你要增加的支出信息(请依次输入时间(月份)、经办人姓名、金额和原因)”,用户输入相应的信息后,屏幕首先输出用户增加的内容,然后输出增加后的文件的全部内容,并将增加后的文件的全部内容打印到"更新后的日志.txt"。
之后,屏幕输出“请选择:1------返回上一级菜单2------返回主菜单”,输入数字1或2,如果输入其他字符,则屏幕会输出“输入错误!请重新输入:”。
输入1后,会返回管理员界面。
输入2后,会返回主菜单界面。
用户在进行操作时,根据屏幕输出的提示进行输入操作,输入数字或文字,在输入完成后,按回车键结束操作。
四、调试及测试在程序的调试及测试过程中,程序出现的问题有:(1)由于粗心,一些符号为中文格式,这些错误但是“Ox”开头的。
(2)密码函数编写错误。
一开始定义密码函数为void型,无法返回值,后来改为int 型后,函数正确了。
(3)增加支出函数编写错误。
运用结构体数组来编写增加支出函数,循环体较为复杂,在经过多次的修改过后,终于确定了最终正确的循环体。