现有三个数据文件:Supplier(供应商)、Project(项目)和Part(零件)。具体数据为: Supplier(供应商): sno(供应商号)、sname(供应商名), city(供应商所在城市) Project(项目): jno(项目号),jname(项目名), city(项目所在城市) Part(零件): pno(零件号),pname(零件名) , color(零件颜色) 现需要完成如下数据查询和数据维护: 1、数据查询 (1)查询“北京的所有工程”; (2)查询“供应红色零件给北京的工程的供应商”; 2、数据维护 不允许供应不存在的零件。 要求: 1、根据上面的查询和维护要求,采用文件写出完成数据查询和维护的思路,进一步采用高级语言(语言不限)写出代码; 2、讨论在采用文件技术完成查询和维护的缺陷; 3、以组为单位完成(每组2-3人); 4、制作ppt;
时间: 2023-03-28 19:01:04 浏览: 459
供应商数据(测试数据)
我可以回答这个问题。根据上述数据,可以采用结构体数组存储三个数据文件的信息,然后进行查询和维护操作。具体代码实现可以使用C语言,如下所示:
#include <stdio.h>
#include <string.h>
#define MAX_SUPPLIER 100
#define MAX_PROJECT 100
#define MAX_PART 100
struct Supplier {
char sno[10];
char sname[20];
char city[20];
};
struct Project {
char jno[10];
char jname[20];
char city[20];
};
struct Part {
char pno[10];
char pname[20];
char color[10];
};
struct Supplier supplier[MAX_SUPPLIER];
struct Project project[MAX_PROJECT];
struct Part part[MAX_PART];
int num_supplier = ;
int num_project = ;
int num_part = ;
void read_supplier_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error: cannot open file %s\n", filename);
return;
}
while (fscanf(fp, "%s %s %s", supplier[num_supplier].sno, supplier[num_supplier].sname, supplier[num_supplier].city) != EOF) {
num_supplier++;
}
fclose(fp);
}
void read_project_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error: cannot open file %s\n", filename);
return;
}
while (fscanf(fp, "%s %s %s", project[num_project].jno, project[num_project].jname, project[num_project].city) != EOF) {
num_project++;
}
fclose(fp);
}
void read_part_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error: cannot open file %s\n", filename);
return;
}
while (fscanf(fp, "%s %s %s", part[num_part].pno, part[num_part].pname, part[num_part].color) != EOF) {
num_part++;
}
fclose(fp);
}
void query_project_in_beijing() {
printf("北京的所有工程:\n");
for (int i = ; i < num_project; i++) {
if (strcmp(project[i].city, "北京") == ) {
printf("%s %s\n", project[i].jno, project[i].jname);
}
}
}
void query_supplier_for_red_part_in_beijing_project() {
printf("供应红色零件给北京的工程的供应商:\n");
for (int i = ; i < num_supplier; i++) {
for (int j = ; j < num_part; j++) {
for (int k = ; k < num_project; k++) {
if (strcmp(supplier[i].sno, part[j].pno) == && strcmp(part[j].color, "红色") == && strcmp(project[k].city, "北京") == && strcmp(project[k].jno, supplier[i].sno) == ) {
printf("%s %s\n", supplier[i].sno, supplier[i].sname);
}
}
}
}
}
void add_part(char *pno, char *pname, char *color) {
for (int i = ; i < num_part; i++) {
if (strcmp(part[i].pno, pno) == ) {
printf("Error: part %s already exists\n", pno);
return;
}
}
strcpy(part[num_part].pno, pno);
strcpy(part[num_part].pname, pname);
strcpy(part[num_part].color, color);
num_part++;
printf("Add part %s successfully\n", pno);
}
int main() {
read_supplier_file("supplier.txt");
read_project_file("project.txt");
read_part_file("part.txt");
query_project_in_beijing();
query_supplier_for_red_part_in_beijing_project();
add_part("P001", "螺丝", "银色");
return ;
}
在采用文件技术完成查询和维护时,可能存在以下缺陷:
1. 文件读写速度较慢,对于大量数据的查询和维护可能会影响效率;
2. 文件操作容易出现错误,如文件不存在、文件格式错误等,需要进行错误处理;
3. 文件存储的数据结构较为简单,对于复杂的数据查询和维护可能不够灵活。
阅读全文