这已经是本小白两年前的一个作品了,现在忽然在网盘里发现了,于是将其完善并修葺一新,分享给后来有需要的读者们。

基本要求

假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息。
用C语言设计一种课程管理的系统,基本功能如下:
1、系统以菜单方式工作
2、课程信息录入功能(课程信息用文件保存)
3、课程信息浏览功能
4、课程信息查询功能:按学分、课程性质查询
5、课程信息排序功能:按照总学时或学分大小进行排序
要求:使用二进制文件方式存储数据

本人的构思与设计理念

两年以前,本人还未接触过命令行的人机交互模式,因此当时设计的界面比较凌乱而且毫无亮点,因此本人没有保留当初凌乱界面的设计代码。在此过了一年,本人已经接触并习惯了Linux命令行的操作模式,于是本人便把当初的程序进行了界面上的修改,使之更加接近Linux命令行的风格。

在Windows系统中运行本人的程序,初始化界面如下:
在这里插入图片描述
Linux中的界面与之相似。

在此基础上,本人创造了特殊的命令来完成要求中相关的操作,本人创建的命令如下:

##System Usage##
$add: Regist the message of the course
$search: Inquire the message of the course
$browse: Print all message of the course
$help: Get help
$clear: Clean the whole cmd
$delete: Remove a message of the course
$revise: Modify the course informaton
$when: Get the current time
$exit: End of this process
##Course Attribute##
$g: Public courses
$b: Required courses
$x: Optional courses
$shang: Last semester
$xia: Next semester
##Message Format##
$  [id] | [name] | [attribute] | [totalTime] | [teachingTime] | [labTime] | [score] | [semester]

这些命令的帮助信息在初始化的界面里一输入help便立马可以显现出来
这样以后,就可以在其基础上编写相关命令对应的函数了。

基本函数介绍

一个单独命令的实现对应一个函数,比如,其中的“clear”命令,就自定义一个函数void clear()来实现,实现方法如下:

void clear(){						//Linux 下运行;
	system("clear");			//Windows下实现:system("cls");
}

其他相关的命令实现函数详见下面:

  • add
    先打开记录信息的那个文件,打开文件之后,通过标准输出打印输入的提示信息,输入完成后,对输入的数据进行合理性校验,若检验不通过则重新输入,通过检验之后,就将信息写入文件中;

  • search
    用户先输入要查询选项的相关信息,输入完成后,打开记录文件,调用fgets函数一行一行读取文件,并把读取到的信息同输入的信息相比对,比对不成功说明没有此课程,否则此课程存在,并打印查询结果;

  • browse
    与search类似,但是只用打开文件,一行一行读取之后,把读取到的信息打印出来即可;

  • delete
    先在当前路径下建立一个临时文件temp.log,用户输入课程的编号和课程的名字后,再对这两项信息进行校验(检验课程是否存在),然后再调用fgets()函数一行一行地读原来course.log文件里的信息,读到一条信息,将此信息写入temp.log中,倘若读到的一条信息和输入课程的信息相同,则不将此信息写入temp.log。以上就是删除一条课程信息的具体方法,当course.log中的信息读完之后,再调用unlink()函数删除course.log,之后再调用rename()函数把temp.log文件改为course.log,这样就实现了文件内容的定向删除。

  • rank
    建立一个结构体course,用于存放课程的相关信息,把course.log中的信息截取之后,将信息写入一个结构体变量course结构体的变量中。多个课程进行排序,所以需要建立一个结构体数组,依照结构体数组中结构体里的变量进行冒泡法或选择法排序即可,以上就是排序函数rank()的基本设计思路。

源程序的代码布局

创建两个头文件,一个头文件usage.h里面声明打印帮助信息的函数和页面布局设计的函数,usage.c中则定义usage.h中的函数;另一个头文件base.h中声明实现命令操作的相关函数(也就是上面提及的add()、delete()、rank()等),在base.c中定义在base.h声明过的函数。

主函数main放在course.c这个C文件里面,负责页面的搭建以及命令输入、命令解析等工作。

源码链接

在这里给出可以在两个操作系统环境里运行的程序源码,分别如下:
Linux版本源码链接
Windows版本源码链接
源码除了供读者们解决应急之需外,也希望各位读者前来完善和优化,谢谢!

效果演示

下面展示出Windows环境下运行的效果:
browse命令响应结果
help命令响应结果
search命令响应结果
when命令响应结果

Logo

快速构建 Web 应用程序

更多推荐