C语言课程设计题目(24个选题)

news2024/11/15 14:06:28

C语言课程设计题目

      • 题目一:职工信息管理系统设计
      • 题目二:图书信息管理系统设计
      • 题目三:图书管理系统设计
      • 题目四:实验设备管理系统设计
      • 题目五:西文下拉菜单的设计
      • 题目六:学生信息管理系统设计
      • 题目七:学生成绩管理系统设计
      • 题目八:学生选修课程系统设计
      • 题目九:学生成绩记录簿设计
      • 题目十:学生籍贯信息记录簿设计
      • 题目十一:学生通讯录管理系统设计
      • 题目十二:职工工作量统计系统设计
      • 题目十三:销售管理系统设计
      • 题目十四:成绩管理系统设计
      • 题目十五:通信录管理系统设计
      • 题目十六:学生管理系统设计
      • 题目十七:单项选择题标准化考试系统设计
      • 题目十八:设计一个简单计算器
      • 题目十九:编写一万年历系统
      • 题目二十:模拟时钟转动程序
      • 题目二十一:完整的学生成绩管理系统
      • 题目二十二:数字加一游戏
      • 题目二十三:基于C++聊天机器人
      • 题目二十四:基于C++的音乐小天才
    • 题目一代码
    • 题目二代码

序号系统设计题目链接
1职工信息管理系统设计链接
2图书信息管理系统设计链接
3图书管理系统设计链接
4实验设备管理系统设计链接
5西文下拉菜单的设计链接
6学生信息管理系统设计链接
7学生成绩管理系统设计链接
8学生选修课程系统设计课程管理系统
9学生成绩记录簿设计链接
10学生籍贯信息记录簿设计链接
11学生通讯录管理系统设计链接
12职工工作量统计系统设计链接
13销售管理系统设计链接
14成绩管理系统设计链接
15通信录管理系统设计链接
16学生管理系统设计链接
17单项选择题标准化考试系统设计链接
18设计一个简单计算器链接
19编写一万年历系统链接
20模拟时钟转动程序链接
21完整的学生成绩管理系统链接
22数字加一游戏链接
23聊天机器人链接
24音乐小天才链接

一、设计要求与设计报告
设计要求

  1. 任意选定以下一个题目完成
  2. 模块化程序设计建立项目工程
  3. 锯齿型(缩进)程序书写格式
  4. 必须上机调试通过

设计报告格式

  1. 设计任务和要求
  2. 总体设计(程序设计组成框图、流程图)
  3. 详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
  4. 调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
  5. 源程序工程包和执行结果:清单中应有足够的注释(另行打包)

二、检查要求

  1. 每个人必须有程序运行结果
  2. 每个人必须交《C语言课程设计报告》和设计程序工程包
  3. 课程设计任务必须由个人独立完成,禁止相互抄袭,如有发现,严肃处理

三、打分标准

  1. 根据平时上机考勤;注重平时上机成绩,教师要不定期检查学生进度,学生不得以自己有私人电脑为借口而不来上机(30%)
  2. 根据程序运行结果(50%),学生能熟练地演示自己的项目,对自己的程序面对教师提问并能熟练地解释清楚。
  3. 根据《C语言课程设计报告》要求完成项目报告(20%)。
  4. 以上三项缺一不可。由于课程设计各题目的难度不一,所以成绩的评定将根据各人完成题目的难度和完成情况的不同,分别评定成绩,如未能完成任何题目,则以不及格计算。

四、提交时间
课程设计任务完成时间为 18周 结束,届时上交课程设计报告和程序。学习委员于 18周前收齐报告纸质版、项目包和报告电子版各一份,按时提交。

五、选题要求
选择每个题目不能超过 3人,每人要独立完成,不能互相抄袭。

题目列表

题目一:职工信息管理系统设计

职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
设计职工信息管理系统,功能包括:

  1. 系统以菜单方式工作。
  2. 职工信息录入功能(职工信息用文件保存)--输入。
  3. 职工信息浏览功能--输出。
  4. 职工信息查询功能--算法。
    • 按学历查询等。
    • 按职工号查询等。
  5. 职工信息删除、修改功能(可选项)。

题目二:图书信息管理系统设计

图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
设计图书信息管理系统,功能包括:

  1. 系统以菜单方式工作。
  2. 图书信息录入功能(图书信息用文件保存)--输入。
  3. 图书信息浏览功能--输出。
  4. 图书信息查询功能--算法。
    查询方式
    • 按书名查询。
    • 按作者名查询。
  5. 图书信息的删除与修改(可选项)。

题目三:图书管理系统设计

图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。
主要功能:

  1. 新进图书基本信息的输入。
  2. 图书基本信息的查询。
  3. 对撤销图书信息的删除。
  4. 为借书人办理注册。
  5. 办理借书手续。
  6. 办理还书手续

要求: 使用二进制文件方式存储数据,系统以菜单方式工作。

题目四:实验设备管理系统设计

实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
主要功能:

  1. 能够完成对设备的录入和修改。
  2. 对设备进行分类统计。
  3. 设备的破损耗费和遗损处理。
  4. 设备的查询。

要求: 采用二进制文件方式存储数据,系统以菜单方式工作。

题目五:西文下拉菜单的设计

主要功能:

  1. 完成一个类似 DevC++集成系统下拉菜单的设计。
  2. 不要求实现各子菜单的功能。

要求: 可以通过光标键的移动来选择不同的菜单项,被选择的菜单项反相显示,当选定某个菜单项后,按回车键可以实现一个简单的动作。

题目六:学生信息管理系统设计

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。设计学生信息管理系统,功能包括:

  1. 系统以菜单方式工作。
  2. 学生信息录入功能(学生信息用文件保存)--输入。
  3. 学生信息浏览功能--输出。
  4. 学生信息查询功能--算法。
    查询方式
    • 按学号查询
    • 按姓名查询
  5. 学生信息的删除与修改(可选项)。

题目七:学生成绩管理系统设计

学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:

  1. 能按学期、按班级完成对学生成绩的录入、修改。
  2. 能按班级统计学生的成绩,求学生的总分及平均分。
  3. 能查询学生成绩,不及格科目及学生名单。
  4. 能按班级输出学生的成绩单。

要求: 使用二进制文件方式存储数据,系统以菜单方式工作。

题目八:学生选修课程系统设计

假定有 n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。设计选修课程系统,功能包括:

  1. 系统以菜单方式工作。
  2. 课程信息录入功能(课程信息用文件保存)--输入。
  3. 课程信息浏览功能--输出。
  4. 课程信息查询功能--算法。
    查询方式
    • 按学分查询。
    • 按课程性质查询。
  5. 学生选修课程(可选项)。

题目九:学生成绩记录簿设计

编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:

  1. 创建信息链表并以磁盘文件保存。
  2. 读取磁盘文件并显示输出所有学生的成绩。
  3. 按学号或姓名查询成绩。
  4. 添加成绩记录。
  5. 修改指定姓名或学号的学生的成绩并可存盘。
  6. 显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息(可选项)。

题目十:学生籍贯信息记录簿设计

编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯。具体功能:

  1. 创建信息链表并以磁盘文件保存。
  2. 读取磁盘文件并显示输出所有学生的籍贯信息。
  3. 按学号或姓名查询其籍贯。
  4. 按籍贯查询并输出该籍贯的所有学生。
  5. 能添加、删除和修改学生的籍贯信息(可选项)。

题目十一:学生通讯录管理系统设计

设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。
主要功能:

  1. 能建立、修改和增删学生通讯录。
  2. 能够按多种方式进行查询。

要求: 界面友好,易于操作,采用二进制文件存储数据。

题目十二:职工工作量统计系统设计

编写一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。要求程序用有序链表存储数据信息。

题目十三:销售管理系统设计

某公司有四个销售员(编号:1~4),负责销售五种产品(编号:1~5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:(1)销售员的代号;(2)产品的代号;(3)这种产品的当天的销售额。每位销售员每天上缴1张便条。
设计便条管理系统,功能包括:

  1. 系统以菜单方式工作。
  2. 便条信息录入功能(便条信息用文件保存)--输入。
  3. 收集到了上个月的所有便条后,读取销售情况。
    • (1)计算每个人每种产品的销售额。
    • (2)按销售额对销售员进行排序,输出排序结果(销售员代号)。
    • (3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)(可选项)。

题目十四:成绩管理系统设计

现有学生成绩信息,内容如下

姓名学号语文数学英语
张明明01677882
李成友02789188
张辉灿03688256
王露04564577
陈东明05673847

用C/C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
(一)功能要求:

  1. 信息维护:
    • 要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
  2. 信息查询:
    • 要求:查询时可实现按姓名查询、按学号查询
  3. 成绩统计:
    • 要求:A输入任意的一个课程名(如数学)和一个分数段(如60–70),统计出在此分数段的学生情况。

(二)其它要求:

  1. 只能使用 C/C++语言,源程序要有适当的注释,使程序容易阅读
  2. 至少采用文本菜单界面(如果能采用图形菜单界面更好)
  3. 学生可自动增加新功能模块(视情况可另外加分)
  4. 写出课程设计报告,具体要求见相关说明文档

题目十五:通信录管理系统设计

用C/C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。
(一)功能要求

  1. 查看功能:选择此功能时,列出下列3类选择。
    • A办公类
    • B个人类
    • C商务类
      当选中某类时,显示出此类所有数据中的姓名和电话号码
  2. 增加功能:能录入新数据(一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类 C 商务类)、电子邮件)。例如
杨春13589664454商务类chuny@126.com

当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。

  1. 拔号功能:能显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字,并伴随相应的拔号声音。
  2. 修改功能:选中某个人的姓名时,可对此人的相应数据进行修改
  3. 删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。

(二)其它要求:

  1. 只能使用 C/C++语言,源程序要有适当的注释,使程序容易阅读
  2. 至少采用文本菜单界面(如果能采用图形菜单界面更好)
  3. 建议使用结构和链表等数据结构
  4. 学生可自动增加新功能模块(视情况可另外加分)
  5. 写出课程设计报告,具体要求见相关说明文档

题目十六:学生管理系统设计

使用提供的数据,设计一个学籍管理系统,实现基本功能。

学生基本信息文件(A.TXT)内容:A.TXT 文件不需要编程录入数据,可用文本编辑工具直接生成。

学号姓名性别宿舍号码电话号码
01张成成50187732111
02李成华10187723112
03王成凤10187723112
04张明明50287734333
05陈东50187732111
06李果50287734333
07张园园10287756122

学生成绩基本信息文件(B.TXT)内容:

学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666

(一)功能要求及说明:

  1. 数据录入功能:
    对B.TXT进行数据录入,录入学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩,综合成绩和实得学分由程序根据条件自动计算。
  • (1)综合成绩计算规则:
    • 如果实验成绩为-1,表示无实验,则:综合成绩 = 平时成绩 * 30% + 卷面成绩 * 70%
    • 如果实验成绩不为-1,则:综合成绩 = 平时成绩 * 15% + 实验成绩 * 15% + 卷面成绩 * 70%
  • (2)实得学分的计算:采用等级学分制。
    • 综合成在90-100之间,实得学分 = 学分 * 100%
    • 综合成在80-90之间,实得学分 = 学分 * 80%
    • 综合成在70-80之间,实得学分 = 学分 * 75%
    • 综合成在60-70之间,实得学分 = 学分 * 60%
    • 综合成在60以下,实得学分 = 学分 * 0%
  1. 查询功能:分为学生基本情况查询和成绩查询。
  • A:学生基本情况查询:
    A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
    A2—输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
  • B:成绩查询:
    B1:输入一个学号时,查询出此生的所有课程情况,格式如下:
学 号:xx姓 名:xxxxx
课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分: xx
课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分: xx
课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分: xx
……
共修:xx 科,实得总学分为: xxx
  1. 删除功能:
    在A.TXT中删除一个学生时,B.TXT中该生所有信息也应自动删除。

  2. 排序功能:
    按综合成绩或实得学分升序或降序排序并显示数据。

(二)其它要求:
1.只能使用 C/C++语言,源程序要有适当的注释,使程序容易阅读。
2.至少采用文本菜单界面(如果能采用图形菜单界面更好)。
3.学生可自动增加新功能模块(视情况可另外加分)。
4.写出课程设计报告,具体要求见相关说明文档。

题目十七:单项选择题标准化考试系统设计

功能要求:

  1. 使用文件保存试题库,每个试题包括题干、4个备选答案、标准答案。
  2. 实现试题录入功能,随时增加试题至试题库。
  3. 实现试题抽取功能,随机抽取N道题进行考试,N由键盘输入。
  4. 实现答题功能,用户输入答案。
  5. 实现自动判卷功能,根据用户答案与标准答案对比给出成绩。

其它要求:

  1. 使用C/C++语言,源程序应有适当注释。
  2. 至少采用文本菜单界面。
  3. 学生可自行增加新功能模块。
  4. 编写课程设计报告。

题目十八:设计一个简单计算器

要求: 功能上尽量模拟Windows操作系统中的计算器,界面设计不做强制要求。

题目十九:编写一万年历系统

要求: 模仿现实中的挂历,显示当前月的每一天及星期几,当系统日期变为下一个月时,自动翻页到下一个月。

题目二十:模拟时钟转动程序

要求: 能模拟机械钟表行走,同时准确显示日期和时间,屏幕上显示一个动态时钟,按下任意键时程序退出。

题目二十一:完整的学生成绩管理系统

(1)系统功能:

  • 建立数据库文件数据结构,输入学生成绩数据,并以文件方式存盘。
  • 对已建立文件进行修改,包括:增加课程、修改课程名、追加记录。
  • 根据某一门课程成绩进行排序。
  • 显示数据库文件信息。

(2)模块层次及功能:
系统的模块级功能如图,可以自行增加其他功能。
在这里插入图片描述

题目二十二:数字加一游戏

游戏功能:
数字加 1 是一款玩法非常简单的益智小游戏,在一个 5×5 的表格中,随机产生不大于 6 的数字。只要点击某一个数字让它加 1,并与相邻的二个以上的数字相同,这些数字就会合成 1 个加 1 的数字。

游戏规则:
游戏开始时,在一个 5*5 的表格中随机填入 1-6 的数字,初始表格中不能有3 个及以上相同数字的连通块,每个格子的颜色由格子填充的数字决定。 当鼠标点击表格中某数字时其值自动加一;然后判断与该数字相连是否存在数字连通块,若存在就消弭使当前位置数字加 1,连通块中的其它数字变为空缺。空缺由上方的数字自动下落填补,上方掉落后的空缺随机填充 1-6 的数字。重复进行检查新的连通块,销弥、掉落、填补等过程,直到不能产生消弭。点击一次,步数就减一,消弭一次步数加一。用完步数游戏完毕。动画显示消弭和掉落过程。

游戏要求:

  1. 系统提供5次机会,每次点击消耗一次,每次合成增加一次,但总数不超过5次。
  2. 记录每次游戏的得分,每合成一次,积分增加相应的分数,最后记录总得分。每次合成的分数为:三个数及以上合成新数得 1 点,四个数合成新数得 2 点,五个数合成新数得 3点,以此类推,每次合成的得分为当前数字乘以点数。比如若有 3 个 3 合成为 4,则本次合成得分为 3×1=3 分,若有 3 个 4 合成为 5,则得分为 3×2=6 分。

题目二十三:基于C++聊天机器人

系统功能:

  1. 通过调用 Windows 系统自带的语音识别功能,随时识别用户通过麦克风说的每一句话并与语音数据库中的预存数据相比较,如果匹配,则回应相应的对话。语音数据库中的预存数据要自建,并逐步丰富。
  2. 朗诵诗词或讲故事。

题目二十四:基于C++的音乐小天才

系统功能:

  1. 通过Windows系统的声音函数,播放音乐。
  2. 自建音乐文件,播放歌曲。
  3. 利用键盘上的键,弹奏歌曲,自定义 1234567(中音),QWERTYU(低音),ASDFGHJ(高音)。
  4. 在屏幕上绘制音乐键盘,鼠标点击发出声音。

题目一代码

在这里插入图片描述

employeeManagement.h

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义最大职工数量
#define MAX_EMPLOYEES 100

//定义职工结构体
typedef struct {
	int id;				// 职工号
	char name[50];		// 姓名
	char gender[50];    // 性别
	int age;			// 年龄
	char education[50];	// 学历
	double salary;		// 工资
	char address[100];	// 地址
	char phone[20];		// 电话
}Employee;
// 显示菜单
void showMenu();
// 主菜单函数
void menu(Employee* employees, int* count);
// 打印单个职工信息
void printEmployee(Employee emp);
// 检查职工号是否唯一
int isIdUnique(Employee* employees, int count, int id);
// 添加职工信息
void addEmployee(Employee* employees, int* count);
// 显示所有职工信息
void displayEmployee(Employee* employees, int count);
// 按学历查询职工信息
void searchByEducation(Employee* employees, int count);
// 按职工号查询职工信息
void searchById(Employee* employees, int count);
// 删除职工信息
void deleteEmployee(Employee* employees, int* count);
// 修改职工信息
void modifyEmployee(Employee* employees, int count);
// 保存职工信息到文件
void saveToFile(Employee* employees, int count);
// 加载职工信息
void loadFromFile(Employee* employees, int* count);

employeeManage.c

#include"employeeManagement.h"

// 显示菜单
void showMenu() {
	printf("\n");
	printf("+--------------------------+\n");
	printf("|    职工信息管理系统       |\n");
	printf("+--------------------------+\n");
	printf("|  1. 录入职工信息         |\n");
	printf("|  2. 浏览职工信息         |\n");
	printf("|  3. 按学历查询职工信息   |\n");
	printf("|  4. 按职工号查询职工信息 |\n");
	printf("|  5. 删除职工信息         |\n");
	printf("|  6. 修改职工信息         |\n");
	printf("|  7. 保存并退出           |\n");
	printf("+-------------------------+\n");
	printf("请选择操作: ");
}
// 主菜单函数
void menu(Employee* employees, int* count) {
	int choice;

	while (1) {
		showMenu();
		scanf("%d", &choice);

		switch (choice) {
		case 1:
			//printf("录入职工信息\n");
			addEmployee(employees, count);
			break;
		case 2:
			//printf("浏览职工信息\n");
			displayEmployee(employees, *count);
			break;
		case 3:
			//printf("按学历查询职工信息\n");
			searchByEducation(employees, *count);
			break;
		case 4:
			//printf("按职工号查询职工信息\n");
			searchById(employees, *count);
			break;
		case 5:
			//printf("删除职工信息\n");
			deleteEmployee(employees, count);
			break;
		case 6:
			//printf("修改职工信息\n");
			modifyEmployee(employees, *count);
			break;
		case 7:
			//printf("退出\n");
			saveToFile(employees, *count);
			return;
		default:
			printf("无效的选择,请重新输入。\n");
		}
	}
}
// 打印单个职工信息
void printEmployee(Employee emp) {
	printf("职工号: %d\n", emp.id);
	printf("姓名: %s\n", emp.name);
	printf("性别: %s\n", emp.gender);
	printf("年龄: %d\n", emp.age);
	printf("学历: %s\n", emp.education);
	printf("工资: %.2f\n", emp.salary);
	printf("地址: %s\n", emp.address);
	printf("电话: %s\n", emp.phone);
	printf("\n");
}
// 检查职工号是否唯一
int isIdUnique(Employee* employees, int count, int id) {
	for (int i = 0; i < count; i++) {
		if (employees[i].id == id) {
			return 0;	//职工号不唯一
		}
	}
	return 1;//职工号唯一
}
// 添加职工信息
void addEmployee(Employee* employees, int* count) {
	if (*count >= MAX_EMPLOYEES) {
		printf("已达到最大容量,无法添加更多职工。\n");
		return;
	}
	Employee* emp = &employees[*count];

	int id;
	printf("请输入职工号: ");
	scanf("%d", &id);

	if (!isIdUnique(employees, *count, id)) {
		printf("职工号已存在,请重新输入。\n");
		return;
	}

	emp->id = id;
	printf("请输入姓名: ");
	scanf("%s", emp->name);
	printf("请输入性别: ");
	scanf("%s", emp->gender);
	printf("请输入年龄: ");
	scanf("%d", &emp->age);
	printf("请输入学历: ");
	scanf("%s", emp->education);
	printf("请输入工资: ");
	scanf("%lf", &emp->salary);
	printf("请输入地址: ");
	scanf("%s", emp->address);
	printf("请输入电话: ");
	scanf("%s", emp->phone);
	(*count)++;
	printf("职工 %s 信息录入成功\n", emp->name);

}
// 显示所有职工信息
void displayEmployee(Employee* employees, int count) {
	for (int i = 0; i < count; i++) {
		printEmployee(employees[i]);
	}
}
// 按学历查询职工信息
void searchByEducation(Employee* employees, int count) {
	char education[50];
	printf("请输入学历进行查询:");
	scanf("%s", education);

	int found = 0;
	for (int i = 0; i < count; i++) {
		if (strcmp(employees[i].education, education) == 0) {
			printEmployee(employees[i]);
			found = 1;
		}
	}
	if (!found) {
		printf("没有找到符合条件的职工。\n");
	}
}
// 按职工号查询职工信息
void searchById(Employee* employees, int count) {
	int id;
	printf("请输入职工号进行查询: ");
	scanf("%d", &id);
	for (int i = 0; i < count; i++) {
		if (employees[i].id == id) {
			printEmployee(employees[i]);
			return;
		}
	}
	printf("没有找到该职工号的职工信息。\n");
}
// 删除职工信息
void deleteEmployee(Employee* employees, int* count) {
	int id;
	printf("请输入要删除的职工号: ");
	scanf("%d", &id);
	for (int i = 0; i < *count; i++) {
		if (employees[i].id == id) {
			//将要删除的职工信息后移
			for (int j = i; j < *count - 1; j++) {
				employees[j] = employees[j + 1];
			}
			(*count)--;//总数减一
			printf("职工号 %d 的信息已经删除。\n", id);
			return;
		}
	}
	printf("没有找到该职工号的职工信息,无法删除。\n");
}
// 修改职工信息
void modifyEmployee(Employee* employees, int count) {
	int id;
	printf("请输入要修改的职工号:");
	scanf("%d", &id);
	for (int i = 0; i < count; i++) {
		if (employees[i].id == id) {
			// 提示用户输入新的信息
			printf("请输入新的姓名: ");
			scanf("%s", employees[i].name);
			printf("请输入新的性别: ");
			scanf("%s", employees[i].gender);
			printf("请输入新的年龄: ");
			scanf("%d", &employees[i].age);
			printf("请输入新的学历: ");
			scanf("%s", employees[i].education);
			printf("请输入新的工资: ");
			scanf("%lf", &employees[i].salary);
			printf("请输入新的地址: ");
			scanf("%s", employees[i].address);
			printf("请输入新的电话: ");
			scanf("%s", employees[i].phone);
			printf("职工号 %d 的信息已修改。\n", id);
			return;
		}
	}
	printf("没有找到该职工号的职工信息,无法修改。\n");
}
// 保存职工信息到文件
void saveToFile(Employee* employees, int count) {
	FILE* file = fopen("employees.txt", "w");
	if (file == NULL) {
		printf("无法打开文件。\n");
		return;
	}

	for (int i = 0; i < count; i++) {
		Employee* emp = &employees[i];
		fprintf(file, "%d %s %s %d %s %.2f %s %s\n",
			emp->id, emp->name, emp->gender, emp->age,
			emp->education, emp->salary, emp->address, emp->phone);
	}

	fclose(file);
	printf("职工信息保存成功。\n");
}
// 加载职工信息
void loadFromFile(Employee* employees, int* count) {
	FILE* file = fopen("employees.txt", "r");
	if (file == NULL) {
		printf("无法打开文件。\n");
		return;
	}

	*count = 0;
	while (*count < MAX_EMPLOYEES && fscanf(file, "%d %s %s %d %s %lf %s %s",
		&employees[*count].id,
		employees[*count].name,
		employees[*count].gender,
		&employees[*count].age,
		employees[*count].education,
		&employees[*count].salary,
		employees[*count].address,
		employees[*count].phone) == 8) {
		(*count)++;
	}

	fclose(file);
	printf("从文件加载了 %d 条记录。\n", *count);
}

test.c

#include"employeeManagement.h"
int main() {
	Employee employees[MAX_EMPLOYEES];
	int count = 0;

	loadFromFile(employees, &count);

	menu(employees, &count);

	return 0;
}

调试验证
录入信息,并浏览
在这里插入图片描述
在这里插入图片描述
验证职工号唯一
在这里插入图片描述

保存职工信息,加载职工信息

在这里插入图片描述

在这里插入图片描述
按职工号进行查询
在这里插入图片描述

根据id删除职工
在这里插入图片描述
修改职工信息

在这里插入图片描述

题目二代码

在这里插入图片描述

bookManagement.h

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_BOOKS 100  // 最大图书数量
#define FILE_NAME "books.txt"  // 文件名

// 定义图书结构体
typedef struct {
    int loginNo;      // 登录号
    char title[100];  // 书名
    char author[100]; // 作者名
    char category[50]; // 分类号
    char publisher[100]; // 出版单位
    char publicationDate[20]; // 出版时间
    double price;     // 价格
} Book;

// 函数声明
void showMenu();
void menu(Book* books, int* count);
void printBook(Book book);
void addBook(Book* books, int* count);
void displayBooks(Book* books, int count);
void searchByTitle(Book* books, int count);
void searchByAuthor(Book* books, int count);
void deleteByTitle(Book* books, int* count);
void deleteByAuthor(Book* books, int* count);
void deleteByLoginNo(Book* books, int* count);
void modifyByLoginNoAndTitle(Book* books, int count);
void saveToFile(Book* books, int count);
void loadFromFile(Book* books, int* count);

bookManagement.c

#include"bookManagement.h"
void showMenu() {
    printf("\n");
    printf("+----------------------------------+\n");
    printf("|    图书信息管理系统              |\n");
    printf("+----------------------------------+\n");
    printf("|  1. 录入图书信息                 |\n");
    printf("|  2. 浏览图书信息                 |\n");
    printf("|  3. 按书名查询图书信息           |\n");
    printf("|  4. 按作者名查询图书信息         |\n");
    printf("|  5. 按登录号删除图书信息         |\n");
    printf("|  6. 按书名删除图书信息           |\n");
    printf("|  7. 按作者名删除图书信息         |\n");
    printf("|  8. 按登录号修改图书信息         |\n");
    printf("|  9. 保存并退出                   |\n");
    printf("+----------------------------------+ \n");
    printf("请选择操作: ");
}
void menu(Book* books, int* count) {
    int choice;
    loadFromFile(books, count);  // 初始化时从文件加载图书信息
    while (1) {
        showMenu();
        scanf("%d", &choice);

        switch (choice) {
        case 1:
            addBook(books, count);  // 添加图书信息
            break;
        case 2:
            displayBooks(books, *count);  // 显示所有图书信息
            break;
        case 3:
            searchByTitle(books, *count);  // 按书名查询图书信息
            break;
        case 4:
            searchByAuthor(books, *count);  // 按作者名查询图书信息
            break;
        case 5:
            deleteByLoginNo(books, count);  // 按登录号删除图书信息
            break;
        case 6:
            deleteByTitle(books, count);  // 按书名删除图书信息
            break;
        case 7:
            deleteByAuthor(books, count);  // 按作者名删除图书信息
            break;
        case 8:
            modifyByLoginNoAndTitle(books, *count);  // 按登录号书名修改图书信息
            break;
        case 9:
            saveToFile(books, *count);  // 保存图书信息并退出
            return;
        default:
            printf("无效的选择,请重新输入。\n");
        }
    }
}
void printBook(Book book) {
    printf("登录号: %d\n", book.loginNo);
    printf("书名: %s\n", book.title);
    printf("作者名: %s\n", book.author);
    printf("分类号: %s\n", book.category);
    printf("出版单位: %s\n", book.publisher);
    printf("出版时间: %s\n", book.publicationDate);
    printf("价格: %.2f\n", book.price);
    printf("\n");
}
void addBook(Book* books, int* count) {
    if (*count >= MAX_BOOKS) {
        printf("已达到最大容量,无法添加更多图书。\n");
        return;
    }
    Book* book = &books[*count];

    printf("请输入登录号: ");
    scanf("%d", &book->loginNo);

    printf("请输入书名: ");
    scanf("%s", book->title);

    printf("请输入作者名: ");
    scanf("%s", book->author);

    printf("请输入分类号: ");
    scanf("%s", book->category);

    printf("请输入出版单位: ");
    scanf("%s", book->publisher);

    printf("请输入出版时间: ");
    scanf("%s", book->publicationDate);

    printf("请输入价格: ");
    scanf("%lf", &book->price);

    (*count)++;
    printf("图书信息录入成功\n");
}
void displayBooks(Book* books, int count) {
    for (int i = 0; i < count; i++) {
        printBook(books[i]);
    }
}
void searchByTitle(Book* books, int count) {
    char title[100];
    printf("请输入书名进行查询: ");
    scanf("%s", title);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (strcmp(books[i].title, title) == 0) {
            printBook(books[i]);
            found = 1;
        }
    }
    if (!found) {
        printf("没有找到符合条件的图书。\n");
    }
}
void searchByAuthor(Book* books, int count) {
    char author[100];
    printf("请输入作者名进行查询: ");
    scanf("%s", author);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (strcmp(books[i].author, author) == 0) {
            printBook(books[i]);
            found = 1;
        }
    }
    if (!found) {
        printf("没有找到符合条件的图书。\n");
    }
}
void deleteByTitle(Book* books, int* count) {
    char title[100];
    printf("请输入要删除的书名: ");
    scanf("%s", title);

    int deleted = 0;
    for (int i = 0; i < *count; i++) {
        if (strcmp(books[i].title, title) == 0) {
            for (int j = i; j < *count - 1; j++) {
                books[j] = books[j + 1];
            }
            (*count)--;
            printf("书名 %s 的图书信息已经删除。\n", title);
            deleted = 1;
            break;
        }
    }
    if (!deleted) {
        printf("没有找到符合条件的图书信息。\n");
    }
}
void deleteByAuthor(Book* books, int* count) {
    char author[100];
    printf("请输入要删除的作者名: ");
    scanf("%s", author);

    int deleted = 0;
    int newCount = 0;
    Book tempBooks[MAX_BOOKS];

    for (int i = 0; i < *count; i++) {
        if (strcmp(books[i].author, author) != 0) {
            tempBooks[newCount++] = books[i];
        }
        else {
            printf("作者名 %s 的图书信息已经删除。\n", author);
            deleted = 1;
        }
    }

    if (!deleted) {
        printf("没有找到符合条件的图书信息。\n");
    }

    // 更新书籍数组
    for (int i = 0; i < newCount; i++) {
        books[i] = tempBooks[i];
    }
    *count = newCount;
}
void deleteByLoginNo(Book* books, int* count) {
    int loginNo;
    printf("请输入要删除的登录号: ");
    scanf("%d", &loginNo);

    int newCount = 0;
    int deleted = 0;

    // 创建一个临时数组来存储未被删除的图书信息
    Book tempBooks[MAX_BOOKS];

    for (int i = 0; i < *count; i++) {
        if (books[i].loginNo != loginNo) {
            tempBooks[newCount++] = books[i];
        }
        else {
            deleted = 1;
        }
    }

    // 将未被删除的图书信息复制回原数组
    for (int i = 0; i < newCount; i++) {
        books[i] = tempBooks[i];
    }

    *count = newCount;

    if (deleted) {
        printf("登录号 %d 的所有图书信息已经删除。\n", loginNo);
    }
    else {
        printf("没有找到符合条件的图书信息。\n");
    }
}

void modifyByLoginNoAndTitle(Book* books, int count) {
    int loginNo;
    printf("请输入要修改的登录号: ");
    scanf("%d", &loginNo);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (books[i].loginNo == loginNo) {
            printf("当前信息:\n");
            printBook(books[i]);

            char confirm;
            printf("确认修改此图书信息吗?(y/n): ");
            scanf(" %c", &confirm);

            if (confirm == 'y' || confirm == 'Y') {
                char title[100];
                printf("请输入要修改的书名: ");
                scanf("%s", title);

                int modified = 0;
                for (int j = 0; j < count; j++) {
                    if (books[j].loginNo == loginNo && strcmp(books[j].title, title) == 0) {
                        printf("请输入新的书名: ");
                        scanf("%s", books[j].title);

                        printf("请输入新的作者名: ");
                        scanf("%s", books[j].author);

                        printf("请输入新的分类号: ");
                        scanf("%s", books[j].category);

                        printf("请输入新的出版单位: ");
                        scanf("%s", books[j].publisher);

                        printf("请输入新的出版时间: ");
                        scanf("%s", books[j].publicationDate);

                        printf("请输入新的价格: ");
                        scanf("%lf", &books[j].price);

                        printf("图书信息已更新。\n");
                        modified = 1;
                    }
                }

                if (!modified) {
                    printf("没有找到指定书名的图书信息。\n");
                }

                found = 1;
                break;
            }
            else {
                printf("取消修改。\n");
                break;
            }
        }
    }

    if (!found) {
        printf("没有找到指定登录号的图书信息。\n");
    }
}
void saveToFile(Book* books, int count) {
    FILE* fp = fopen(FILE_NAME, "w");
    if (fp == NULL) {
        printf("无法打开文件 '%s' 进行写入。\n", FILE_NAME);
        return;
    }

    for (int i = 0; i < count; i++) {
        fprintf(fp, "%d,%s,%s,%s,%s,%s,%.2f\n",
            books[i].loginNo,
            books[i].title,
            books[i].author,
            books[i].category,
            books[i].publisher,
            books[i].publicationDate,
            books[i].price);
    }

    fclose(fp);
    printf("图书信息保存成功。\n");
}
void loadFromFile(Book* books, int* count) {
    FILE* fp = fopen(FILE_NAME, "r");
    if (fp == NULL) {
        printf("文件 '%s' 不存在,创建新文件。\n", FILE_NAME);
        fp = fopen(FILE_NAME, "w");
        fclose(fp);
        return;
    }

    *count = 0;
    while (fscanf(fp, "%d,%[^,],%[^,],%[^,],%[^,],%[^,],%lf",
        &books[*count].loginNo,
        books[*count].title,
        books[*count].author,
        books[*count].category,
        books[*count].publisher,
        books[*count].publicationDate,
        &books[*count].price) != EOF) {
        (*count)++;
    }

    fclose(fp);
    printf("图书信息加载成功。\n");
}

test.c

#include"bookManagement.h"

int main() {
    Book books[MAX_BOOKS];
    int count = 0;

    menu(books, &count);

    return 0;
}

终端测试截图

添加图书
在这里插入图片描述
按下9 保存退出后,再次启动,按下2,浏览,没有问题
在这里插入图片描述
继续添加图书

199,西游记,吴承恩,I242.4,浙江古籍出版社,2010,35.00
199,鲁迅全集,鲁迅,略,略,略,900.00
199,呐喊,鲁迅,略,略,略,56.00
199,三国演义,罗贯中,略,略,略,79.00
89,红楼梦,曹雪芹,略,略,略,89.00
89,水浒传,施耐庵,略,略,略,99.00
19,测试,测试,测试,测试,测试,55.00
19,测试,测试,测试,测试,测试,35.00

根据书名查询图书
在这里插入图片描述
根据作者查询图书
在这里插入图片描述
一次性删除所有该登录号信息

199,西游记,吴承恩,I242.4,浙江古籍出版社,2010,35.00
199,鲁迅全集,鲁迅,略,略,略,900.00
199,呐喊,鲁迅,略,略,略,56.00
199,三国演义,罗贯中,略,略,略,79.00
89,红楼梦,曹雪芹,略,略,略,89.00
89,水浒传,施耐庵,略,略,略,99.00

在这里插入图片描述
没有登录号19的图书
在这里插入图片描述
删除图书

在这里插入图片描述
删除作者的图书
在这里插入图片描述
修改登录号下的图书
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R包:gplots经典热图

加载R包 # install.packages("gplots")library("gplots")数据 mat <- matrix(rnorm(1200), ncol6)画图1 heatmap.2(xmat)画图2 heatmap.2(xmat, ColvFALSE, dendrogram"row",scale"row",col"bluered",trace"non…

用Python提取PDF表格到Excel文件

在对PDF中的表格进行再利用时&#xff0c;除了直接将PDF文档转换为Excel文件&#xff0c;我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰&#xff0c;获得更易于分析和处理的表格数据&#xff0c;并方便进行更多的格式设…

uniapp监听滚动实现顶部透明度变化

效果如图&#xff1a; 实现思路&#xff1a; 1、使用onPageScroll监听页面滚动&#xff0c;改变导航条的透明度&#xff1b; 2、关于顶部图片的高度&#xff1a; 如果是小程序&#xff1a;使用getMenuButtonBoundingClientRect获取胶囊顶部距离和胶囊高度&#xff1b; 如果…

List几种遍历方法速度

准备数据 ArrayList<Integer> list new ArrayList<Integer>();for (int i 0; i < 100000000; i) {list.add(i); }1.for循环 for (int i 0; i < list.size(); i) {Integer str list.get(i); }2.for-each循环 for (Integer vo:list) {}3.Lambda list.forEa…

XXl-SSO分布式单点登录框架

概述 下载地址&#xff1a;https://gitee.com/xuxueli0323/xxl-sso 文档地址&#xff1a;https://www.xuxueli.com/xxl-sso/ 概述 XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有"轻量级、分布式、跨域、CookieToken均支持…

工业数据采集系统

一、网页部分代码 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

中国蚁剑(antSword)安装使用

antSword下载 antSword-Loader下载 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/12 19:35 中国蚁剑&#xff08;AntSword&#xff09;是一款跨平台的开源网站管理工具&#xff0c;旨在满足渗透测试人员的需求。它是一个功能强大的工具&#xff0c;可以帮助用户管理…

这样做PPT也太酷了吧,27.9kstar,适合开发者的ppt工具推荐

1 slidev简介 slidev 是一个基于 Vue 开发的网页演示文稿工具,主要功能是将 Markdown 文档转换为演示幻灯片。 为开发者打造的演示文稿工具 Slidev最大的优势在于整个演示文稿内容的编写采用简单的Markdown格式,这极大降低了创作门槛。我们可以使用VS Code等编辑器高效编写Mar…

Linux centerOS 服务器搭建NTP服务

1&#xff0c;安装 NTP软件 sudo yum -y install ntp2&#xff0c;编辑配置文件 sudo vim /etc/ntp.conf 3&#xff0c;修改配置 在ntp.conf文件中&#xff0c;可以配置服务器从哪些上游时间源同步时间。如果你想让你的服务器对外同步时间&#xff0c;可以去掉restrict d…

js中Fucntion的意义

在js中&#xff0c;我们常常如下方式写函数&#xff1a; function fn(){console.log("这是一个函数."); }; fn(); 在js中&#xff0c;函数本质就是一个对象。 那么&#xff0c;结合我的上一篇文章&#xff1a;通俗讲解javascript的实例对象、原型对象和构造函数以及…

C盘空间不足--WizTree(管理空间)

WizTree&#xff1a;高效的磁盘空间分析工具 在日常使用电脑的过程中&#xff0c;磁盘空间的管理常常成为一个棘手的问题。随着文件的不断增加&#xff0c;我们的硬盘空间逐渐被占满&#xff0c;而这些文件中有很多其实并不重要。为了帮助用户更好地管理磁盘空间&#xff0c;Wi…

CNS-WRFID-01地标卡读写器|写卡器DEMO软件读、写操作说明

CNS-WRFID-01地标卡读写器|写卡器是一款高频读写设备&#xff0c;支持ISO15693协议芯片卡&#xff0c;地标标签读写&#xff0c;支持兴颂系列抗金属|非抗金属RFID标签&#xff0c;如&#xff1a;CNS-CRFID-01、CNS-CRFID-02、CNS-CRFID-03、CNS-CRFID-04、CNS-CRFID-05、CNS-CR…

Vue3 中集成海康 H5 监控视频播放功能

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:Vue-集成海康 H5 监控视频播放功能 目录 一、引言 二、环境搭建 三、代码解析 子组件部分 1.…

Spring项目报错:Public Key Retrieval is not allowed

报错原因&#xff1a; 如图 在你项目的数据库下可以找到该文件 解决方案&#xff1a; 在service-oa模块的application-dev.yml文件中 在红框中改成下面代码&#xff0c;数据库与具体项目保持一致&#xff0c;不一定是我这个&#xff0c;改allowPublicKeyRetrievaltrue String…

支持K歌音箱方案应用的高性能 32 位蓝牙音频应用处理器-BP1048B2

DSP是一类嵌入式通用可编程微处理器&#xff0c;主要用于实现对信号的采集、识别、变换、增强、控制等算法处理&#xff0c;是各类嵌入式系统的“大脑”应用十分广泛。BP1048B2是一款高性能DSP音频数字信号处理器芯片&#xff0c;能实现多种音频功能如混响、均衡、滤波、反馈抑…

Python邮件发送附件:怎么配置SMTP服务器?

Python邮件发送附件如何实现&#xff1f;Python发送带附件邮件&#xff1f; 在自动化和脚本编写中&#xff0c;使用Python发送带有附件的邮件是一个非常实用的功能。AokSend将详细介绍如何配置SMTP服务器&#xff0c;以便在Python中实现邮件发送附件的功能。 Python邮件发送附…

Postman/Jmeter接口测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比如你需要从别的系统来获取到或者同步资源与信息&#xff0c;他们会提供给你一个写好…

独立站烧钱背后:Facebook 广告转化率策略的神秘“致胜法则”

Facebook广告作为大部分零售独立站的主要“烧钱”渠道&#xff0c;投放策略的决策往往比日常操作技巧更为重要。 之前出海笔记分享过关于在我们烧了一年广告预算后&#xff0c;对人群定位的总结 这次在另外一个项目上再次印证了我们的推断。 省流&#xff1a;直接告诉你们结论…

全国糖酒会全域采购商选品会前瞻-见证零售新势力的崛起与变革

消费市场正经历着前所未有的变革。新兴零售渠道如雨后春笋般迅速崛起&#xff0c;对传统大卖场和电商模式提出了严峻挑战。在这一变革浪潮中&#xff0c;仓储会员店、零食折扣店、即时零售、内容电商以及私域团购等新兴模式脱颖而出&#xff0c;零售商与供应商关系被重构&#…

2024最新Linux发行版,Kali Linux迎来劲敌,零基础入门到精通,收藏这一篇就够了

概念简介 Parrot OS 是一款基于 Debian 的 Linux 发行版&#xff0c;专门为安全研究、渗透测试、开发以及隐私保护而设计。由 Frozenbox 团队开发的 Parrot OS&#xff0c;结合了现代安全工具、用户友好的环境以及出色的隐私保护特性&#xff0c;成为网络安全从业者、开发人员…