用c语言写:实现一个简单的信息管理系统,具有以下功能: 1. 信息输入:可以输入信息标题、内容、作者、分类等信息,存入信息库中。要求支持多条信息输入。 2. 信息检索:可以按标题、作者、分类等信息进行检索,找到相关的信息条目输出全部信息。 3. 信息修改:可以修改已有的信息条目,修改信息包括标题、内容、作者、分类等。 4. 信息删除:可以根据标题删除已有的信息条目。 5. 信息统计:可以统计信息库中的信息总条数或者某个分类的条数。 6. 信息输出:可以输出所有信息或者某分类下所有的信息。信息以标题、内容、作者等形式整齐打印。 该信息管理系统需要具备一个统一的菜单界面,支持用户通过键入不同的选项进行各种操作。系统需要开辟相应的结构体,考虑使用数据文件等保存信息。
时间: 2024-04-07 18:31:22 浏览: 91
下面是一个简单的信息管理系统的实现,使用了结构体和文件操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TITLE_LEN 50
#define MAX_CONTENT_LEN 500
#define MAX_AUTHOR_LEN 20
#define MAX_CATEGORY_LEN 20
#define MAX_INFO_NUM 100
// 信息结构体
typedef struct {
char title[MAX_TITLE_LEN];
char content[MAX_CONTENT_LEN];
char author[MAX_AUTHOR_LEN];
char category[MAX_CATEGORY_LEN];
} Info;
// 存储所有信息的数组
Info infos[MAX_INFO_NUM];
// 信息数量
int info_count = 0;
// 显示菜单
void show_menu() {
printf("\n");
printf("1. 输入信息\n");
printf("2. 检索信息\n");
printf("3. 修改信息\n");
printf("4. 删除信息\n");
printf("5. 统计信息\n");
printf("6. 输出信息\n");
printf("0. 退出\n");
printf("\n");
}
// 输入信息
void input_info() {
printf("请输入信息标题:");
scanf("%s", infos[info_count].title);
printf("请输入信息内容:");
scanf("%s", infos[info_count].content);
printf("请输入信息作者:");
scanf("%s", infos[info_count].author);
printf("请输入信息分类:");
scanf("%s", infos[info_count].category);
info_count++;
}
// 检索信息
void search_info() {
printf("请输入检索关键字:");
char keyword[MAX_TITLE_LEN];
scanf("%s", keyword);
int found = 0;
for (int i = 0; i < info_count; i++) {
if (strstr(infos[i].title, keyword) ||
strstr(infos[i].author, keyword) ||
strstr(infos[i].category, keyword)) {
printf("%s\n", infos[i].title);
printf("%s\n", infos[i].content);
printf("作者:%s\n", infos[i].author);
printf("分类:%s\n", infos[i].category);
printf("\n");
found = 1;
}
}
if (!found) {
printf("没有找到相关的信息!\n");
}
}
// 修改信息
void modify_info() {
printf("请输入要修改的信息标题:");
char title[MAX_TITLE_LEN];
scanf("%s", title);
int found = 0;
for (int i = 0; i < info_count; i++) {
if (strcmp(infos[i].title, title) == 0) {
printf("请输入新的信息标题:");
scanf("%s", infos[i].title);
printf("请输入新的信息内容:");
scanf("%s", infos[i].content);
printf("请输入新的信息作者:");
scanf("%s", infos[i].author);
printf("请输入新的信息分类:");
scanf("%s", infos[i].category);
found = 1;
break;
}
}
if (!found) {
printf("没有找到要修改的信息!\n");
}
}
// 删除信息
void delete_info() {
printf("请输入要删除的信息标题:");
char title[MAX_TITLE_LEN];
scanf("%s", title);
int found = 0;
for (int i = 0; i < info_count; i++) {
if (strcmp(infos[i].title, title) == 0) {
for (int j = i; j < info_count - 1; j++) {
infos[j] = infos[j + 1];
}
info_count--;
found = 1;
break;
}
}
if (!found) {
printf("没有找到要删除的信息!\n");
}
}
// 统计信息
void count_info() {
printf("请输入要统计的分类(输入all统计全部信息):");
char category[MAX_CATEGORY_LEN];
scanf("%s", category);
int count = 0;
if (strcmp(category, "all") == 0) {
count = info_count;
} else {
for (int i = 0; i < info_count; i++) {
if (strcmp(infos[i].category, category) == 0) {
count++;
}
}
}
printf("共有%d条信息!\n", count);
}
// 输出信息
void output_info() {
printf("请输入要输出的分类(输入all输出全部信息):");
char category[MAX_CATEGORY_LEN];
scanf("%s", category);
for (int i = 0; i < info_count; i++) {
if (strcmp(category, "all") == 0 || strcmp(infos[i].category, category) == 0) {
printf("%s\n", infos[i].title);
printf("%s\n", infos[i].content);
printf("作者:%s\n", infos[i].author);
printf("分类:%s\n", infos[i].category);
printf("\n");
}
}
}
// 保存信息到文件
void save_info() {
FILE *fp = fopen("infos.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fprintf(fp, "%d\n", info_count);
for (int i = 0; i < info_count; i++) {
fprintf(fp, "%s\n", infos[i].title);
fprintf(fp, "%s\n", infos[i].content);
fprintf(fp, "%s\n", infos[i].author);
fprintf(fp, "%s\n", infos[i].category);
}
fclose(fp);
}
// 从文件中读取信息
void load_info() {
FILE *fp = fopen("infos.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fscanf(fp, "%d", &info_count);
for (int i = 0; i < info_count; i++) {
fscanf(fp, "%s", infos[i].title);
fscanf(fp, "%s", infos[i].content);
fscanf(fp, "%s", infos[i].author);
fscanf(fp, "%s", infos[i].category);
}
fclose(fp);
}
int main() {
load_info(); // 从文件中读取信息
int choice;
do {
show_menu();
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_info();
break;
case 2:
search_info();
break;
case 3:
modify_info();
break;
case 4:
delete_info();
break;
case 5:
count_info();
break;
case 6:
output_info();
break;
case 0:
save_info(); // 保存信息到文件
printf("谢谢使用!\n");
break;
default:
printf("请输入正确的选项!\n");
break;
}
} while (choice != 0);
return 0;
}
```
这个程序使用了一个 `Info` 结构体来存储信息,使用了一个 `infos` 数组来存储所有信息,使用了一个 `info_count` 变量来记录信息数量。
程序提供了菜单界面,用户可以通过键入不同的选项进行各种操作。具体实现如下:
1. 输入信息:用户可以输入信息标题、内容、作者、分类等信息,并将信息存入信息库中。要求支持多条信息输入。
2. 检索信息:用户可以按标题、作者、分类等信息进行检索,找到相关的信息条目输出全部信息。
3. 修改信息:用户可以修改已有的信息条目,修改信息包括标题、内容、作者、分类等。
4. 删除信息:用户可以根据标题删除已有的信息条目。
5. 统计信息:用户可以统计信息库中的信息总条数或者某个分类的条数。
6. 输出信息:用户可以输出所有信息或者某分类下所有的信息。信息以标题、内容、作者等形式整齐打印。
程序还使用了文件操作,将程序运行时的信息保存到一个文本文件中,程序启动时读取该文件,恢复之前的信息。
阅读全文