#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_TUTORIALS 20
//定义数组最大长度
// 定义结构体用于存储数据
struct Tutorial {
int id;//编号
char name[50];//名称
float price;//价格
int quantity;//数量
char major[50];//使用专业
char author[50];//作者
char publisher[50];//出版社
char publishDate[20];//出版日期
};
// 创建文件,存储数据
void create() {
// 文件名
const char* fileName = "Tutorials.csv";
// 尝试打开文件
FILE* file = fopen(fileName, "r");
// 检查文件是否存在
if (file == NULL){
// 创建新文件
file = fopen(fileName, "w");
// 检查文件是否成功创建
if (file != NULL) {
fclose(file); // 关闭文件
} else {
printf("无法创建文件 %s。\n", fileName);
}
} else {
fclose(file); // 关闭文件
}
}
// 将结构体数组数据存储到文件
void put(struct Tutorial *tutorials, int len) {
int i;
FILE *file = fopen("Tutorials.csv", "w");
if (file == NULL) {
perror("无法打开文件");
return;
}
for (i = 0; i < len; ++i) {
fprintf(file, "%d,%s,%.2f,%d,%s,%s,%s,%s\n",
tutorials[i].id, tutorials[i].name, tutorials[i].price,
tutorials[i].quantity, tutorials[i].major, tutorials[i].author,
tutorials[i].publisher, tutorials[i].publishDate);
}
fclose(file);
}
// 从文件中逐行读取数据并存储到结构体数组中
void get(struct Tutorial *tutorials, int *len) {
int i = 0;
FILE *file = fopen("Tutorials.csv", "r");
if (file == NULL) {
perror("无法打开文件");
return;
}
// 逐行读取文件
while (fscanf(file, "%d,%99[^,],%f,%d,%49[^,],%49[^,],%49[^,],%19[^\n]\n",
&tutorials[i].id, tutorials[i].name, &tutorials[i].price,
&tutorials[i].quantity, tutorials[i].major, tutorials[i].author,
tutorials[i].publisher, tutorials[i].publishDate) == 8) {
i++;
}
// 修改len的值
*len = i;
fclose(file);
}
// 菜单显示函数
void display() {
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("================================\n");
}
// 辅助函数,检查编号是否唯一
int isValidID(struct Tutorial *tutorials, int len,int id){
int i;
for (i = 0; i < len; ++i) {
if (tutorials[i].id == id) {//数字相同,编号已存在
printf("错误,教程编号已存在,请重新输入唯一的教程编号。\n");
return 1;
}else if(id<1){//编号小于1,格式错误
printf("错误,输入的格式有误,请检查输入。\n");
return 1;
}
}
return 0;
}
// 辅助函数,检查日期格式是否合法
int isValidDate(const char *date) {
int year, month, day;
if(sscanf(date, "%d/%d/%d", &year, &month, &day) == 3){
return 0;
}else{
printf("错误,日期格式不合法!\n");
return 1;
}
}
// 辅助函数,向数组中添加数据
void add(struct Tutorial *tutorials, int position) {
if (position < MAX_TUTORIALS) {
int i=0,id=0,c;
// 获取并校验编号唯一
do{
printf("请输入教程编号: ");
scanf("%d", &id);
while ((c = getchar()) != '\n' && c != EOF) {};
}while (isValidID(tutorials,position,id));
tutorials[position].id=id;
printf("请输入教程名称: ");
scanf(" %s", tutorials[position].name);
printf("请输入价格: ");
scanf("%f", &tutorials[position].price);
printf("请输入数量: ");
scanf("%d", &tutorials[position].quantity);
printf("请输入使用专业: ");
scanf(" %s", tutorials[position].major);
printf("请输入作者: ");
scanf(" %s", tutorials[position].author);
printf("请输入出版社: ");
scanf(" %s", tutorials[position].publisher);
// 获取并校验日期格式
do {
printf("请输入出版日期(格式:年/月/日): ");
scanf("%s", tutorials[position].publishDate);
} while (isValidDate(tutorials[position].publishDate));
printf("添加成功!\n");
} else {
printf("数组已满,无法添加更多数据。\n");
}
}
//1.输入函数
void adds(struct Tutorial *tutorials, int *len){
int num=0,i;
printf("请输入添加教材数量:");
scanf(" %d",&num);
getchar();
for(i=0;i<num;i++){
add(tutorials,*len);
(*len)++;
}
}
// 2.显示函数
void show(struct Tutorial *tutorials, int len) {
int i;
printf("|-----------------------------------------------------------------------------------------------------------------|\n");
printf("| %-5s | %-15s | %-10s | %-8s | %-15s | %-10s | %-15s | %-12s |\n",
"编号", "名称", "价格", "数量", "使用专业", "作者", "出版社", "出版日期");
printf("|-------|-----------------|------------|----------|-----------------|------------|-----------------|--------------|\n");
for (i = 0; i < len; ++i) {
printf("| %-5d | %-15s | %-10.2f | %-8d | %-15s | %-10s | %-15s | %-12s |\n",
tutorials[i].id, tutorials[i].name, tutorials[i].price,
tutorials[i].quantity, tutorials[i].major, tutorials[i].author,
tutorials[i].publisher, tutorials[i].publishDate);
}
printf("|-----------------------------------------------------------------------------------------------------------------|\n");
}
//3.在某编号后插入数据
void insert(struct Tutorial *tutorials, int *len){
struct Tutorial Cache[MAX_TUTORIALS];
int num=0,position=-1,id=0,i=0,Cache_len=0,flag=0;
char c;
printf("请输入要插入位置的前一条记录的编号:");
scanf("%d",&id);
c=getchar();
for(i=0;i<*len;i++){//循环遍历,找到要插入的位置
if(tutorials[i].id==id){
position=i;
break;
}
}
if(position==-1){//若未找到该编号则退出
printf("错误,该编号不存在!\n");
return;
}
do{//获取数据条数并判断是否超额
flag=0;
printf("请输入要插入的数据条数:");
scanf("%d",&num);
c=getchar();
if(num>MAX_TUTORIALS-(*len)){
printf("错误,超出数组剩余大小!");
flag=1;
};
}while(flag);
for(i=0;i<num;i++){//将新数据添加到数组末尾备用,同时保存到缓存区中
add(tutorials,*len+i);
Cache[i]=tutorials[*len+i];
}
for(i=*len-1;i>position;i--){//将数据向后移动,腾出插入位置
tutorials[i+num]=tutorials[i];
}
for(i=0;i<num;i++){//将缓存区中的数据插入到数组中
tutorials[position+1+i]=Cache[i];
}
*len+=num;//更新数组长度
}
//4.查找函数
void find(struct Tutorial *tutorials, int len){
//声明结构体数组存储查询结果
struct Tutorial find_list[MAX_TUTORIALS];
//声明变量存储选择、结构体长度、查询的id值、遍历值
int choice=0,find_len=0,target_id,i;
char str[50];//声明变量存储字符串查询条件
printf("请选择查找方式\n");
printf("1.编号\n");
printf("2.名称\n");
printf("3.使用专业\n");
printf("4.作者\n");
printf("5.出版社\n");
printf("请输入操作编号:");
scanf("%d",&choice);
// 根据用户选择执行相应操作
switch (choice) {
case 1:
{
printf("请输入要查找的编号:");
scanf("%d", &target_id);
//遍历原结构体数组,提取查询结果
for (i = 0; i < len; ++i) {
if (tutorials[i].id == target_id) {
find_list[find_len++] = tutorials[i];
}
}
break;
}
case 2:
{
printf("请输入要查找的名称:");
scanf("%s", str);
for (i = 0; i < len; ++i) {
if (strcmp(tutorials[i].name, str) == 0) {
find_list[find_len++] = tutori
没有合适的资源?快使用搜索试试~ 我知道了~
C语言期末:教材管理系统
共65个文件
tlog:43个
pdb:2个
manifest:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 8 浏览量
2024-03-11
20:12:08
上传
评论
收藏 852KB RAR 举报
温馨提示
题目描述: 实现对教材库的信息管理。每条教材记录至少包括如下信息:编号、名称、价格、数量、使用专业、作者、出版社、出版日期等。 功能要求: (1)输入功能:可以一次完成若干条记录的输入。 (2)显示功能:完成全部记录的显示。 (3)插入功能:插入添加一-条或多条记录。 (4)查找功能:按多种方式查找并显示。 (至少实现2种,比如按照出版社或者作者等) (5)删除功能:按教材编号进行删除。 (6)修改功能:按教材编号进行修改。 扩展功能: (1)增加统计功能。比如按照出版社统计教材的平均价格等。 (2)教材记录信息从文件读入。 (3)将教材记录信息保存到文件中。
资源推荐
资源详情
资源评论
收起资源包目录
教材管理系统.rar (65个子文件)
教材管理系统
教材管理系统.sdf 2.21MB
教材管理系统.suo 10KB
教材管理系统.sln 926B
ipch
教材管理系统-24d869e4
教材管理系统-b8aa0f16.ipch 2.25MB
教材管理系统
test.c 13KB
Tutorials.csv 227B
教材管理系统.vcxproj.filters 940B
教材管理系统.vcxproj 4KB
教材管理系统.vcxproj.user 143B
Debug
link.17828-cvtres.read.1.tlog 2B
link.2060-cvtres.write.1.tlog 2B
test.obj 54KB
link.19576-cvtres.write.1.tlog 2B
教材管理系统.write.1.tlog 0B
CL.write.1.tlog 218B
rc.command.1.tlog 446B
教材管理系统.vcxprojResolveAssemblyReference.cache 713B
rc.write.1.tlog 218B
link.19576.read.1.tlog 2B
mt.command.1.tlog 344B
mt.read.1.tlog 238B
rc.read.1.tlog 210B
教材管理系统.exe.embed.manifest 406B
link.7664.write.1.tlog 2B
vc100.idb 35KB
link.7664-cvtres.read.1.tlog 2B
link.7664-cvtres.write.1.tlog 2B
link.17828.write.1.tlog 2B
link.9220-cvtres.write.1.tlog 2B
教材管理系统.log 2KB
vc100.pdb 60KB
link.19576-cvtres.read.1.tlog 2B
教材管理系统.exe.embed.manifest.res 472B
教材管理系统.exe.intermediate.manifest 381B
link.command.1.tlog 1KB
link.17000-cvtres.write.1.tlog 2B
link.13076-cvtres.read.1.tlog 2B
link.7664.read.1.tlog 2B
link.9220.read.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.13076-cvtres.write.1.tlog 2B
link.2060.read.1.tlog 2B
教材管理系统.lastbuildstate 62B
link.read.1.tlog 2KB
cl.command.1.tlog 566B
link.write.1.tlog 518B
link.17828.read.1.tlog 2B
link.13076.write.1.tlog 2B
link.17000.write.1.tlog 2B
link.19576.write.1.tlog 2B
教材管理系统_manifest.rc 202B
link-cvtres.write.1.tlog 2B
link.13076.read.1.tlog 2B
mt.write.1.tlog 238B
link.17828-cvtres.write.1.tlog 2B
link.9220.write.1.tlog 2B
link.17000-cvtres.read.1.tlog 2B
link.2060-cvtres.read.1.tlog 2B
link.2060.write.1.tlog 2B
link.17000.read.1.tlog 2B
link.9220-cvtres.read.1.tlog 2B
CL.read.1.tlog 1KB
Debug
教材管理系统.pdb 467KB
教材管理系统.ilk 492KB
教材管理系统.exe 39KB
共 65 条
- 1
资源评论
a辰龙a
- 粉丝: 2820
- 资源: 59
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功