使用的软件是dev c++,想要用remove函数和rename函数,但是出现权限不足,有什么办法解决啊,求帮助,要不然这个系统就完成不了了,我用了DeleteFile和MoveFile这两个函数也出现了同样的问题
看看代码吧......
给你的exe添加管理员权限
/*
题目18:药房管理系统
功能:设计药房管理系统,输入药品基本信息(药品编号、名称、单价、库存数量、品牌),并实现以下功能:
1、修改、删除指定药品的信息
2、按单价或库存数量排序并显示药品信息
3、统计指定品牌药品数量
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:实现药品的添加、修改、删除等功能;
3、进一步要求:实现排序及统计功能。
要求:1、用C语言实现程序设计;
2、系统的各个功能模块要求用函数实现;
3、界面友好(良好的人机交互),程序加必要的注释。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <mmsystem.h>
#include <errno.h>
void information();//功能信息大屏
void insert();//添加药品
void change();//修改药品信息
void durg_delete();//删除药品信息
void id_sequence();//按编号排序并显示药品信息
void price_sequence();//按单价排序并显示药品信息
void amount_sequence();//按库存数量显示药品信息
void amount_brand();//统计指定品牌药品数量
// 药品结构体
typedef struct {
char id[20]; // 药品编号
char name[50]; // 名称
float price; // 单价
int stock; // 库存数量
char brand[50]; // 品牌
} Drug;
int main() {
FILE *fp;
fp = fopen("medicine.dat", "rb+"); // 打开药品数据文件,如果不存在则进行下面的if语句创建
// (为了演示方便,我们已提前创建好文件且载入了数据)
if (fp == NULL) { // 如果文件打开失败
fp = fopen("medicine.dat", "wb"); // 创建新的药品数据文件
fclose(fp);
fp = fopen("medicine.dat", "rb+"); // 重新打开文件,以便于后续读写操作
}
int choice;
do {
information();
scanf("%d", &choice); // 读取用户输入的选项
switch(choice) {
case 1:
insert(); // 添加药品
break;
case 2:
change(); // 修改药品信息
break;
case 3:
durg_delete(); // 删除药品
break;
case 4:
id_sequence();//按编号排序并显示药品信息
break;
case 5:
price_sequence(); // 按单价排序并显示药品信息
break;
case 6:
amount_sequence(); // 按库存数量排序并显示药品信息
break;
case 7:
amount_brand(); // 统计指定品牌药品数量
break;
case 0:
printf("系统退出,感谢使用!\n");
break;
default:
printf("输入有误,请重新输入!\n");
}
} while (choice != 0);
fclose(fp);
printf("系统退出,感谢使用!\n");
return 0;
}
/功能信息大屏
void information() {
printf("1. 添加药品\n");
printf("2. 修改药品\n");
printf("3. 删除药品\n");
printf("4. 按编号排序并显示药品信息\n");
printf("5. 按单价排序并显示药品信息\n");
printf("6. 按库存数量排序并显示药品信息\n");
printf("7. 统计指定品牌药品数量\n");
printf("0. 退出系统\n");
printf("请输入您的选择:");
}
// 添加药品
void insert() {
Drug medicine;
FILE *fp;
fp = fopen("medicine.dat", "ab"); // 以追加的方式打开文件
printf("请输入药品编号:");
scanf("%s", medicine.id);
getchar();
printf("请输入药品名称:");
fgets(medicine.name, 50, stdin);
printf("请输入药品单价:");
scanf("%f", &medicine.price);
printf("请输入库存数量:");
scanf("%d", &medicine.stock);
getchar();
printf("请输入药品品牌:");
fgets(medicine.brand, 50, stdin);
fwrite(&medicine, sizeof(Drug), 1, fp); // 将药品信息写入文件
fclose(fp);
printf("药品添加成功!\n");
system("pause");
system("cls");
}
// 修改药品信息
void change() {
Drug medicine;
FILE *fp;
char id[20];
int found = 0;
fp = fopen("medicine.dat", "rb+"); // 以可读可写的方式打开文件
printf("请输入要修改的药品编号:");
scanf("%s",id);
while (fread(&medicine, sizeof(Drug), 1, fp) == 1) { // 循环读取文件中的药品信息
if (strcmp(medicine.id, id) == 0) { // 如果找到了要修改的药品,先输出原来商品的信息,方便看哪一块信息需要修改
printf("药品编号:%s\n", medicine.id);
printf("药品名称:%s", medicine.name);
printf("药品单价:%.2f\n", medicine.price);
printf("库存数量:%d\n", medicine.stock);
printf("药品品牌:%s", medicine.brand);
printf("\n以上为药品旧信息\n\n");
printf("请输入新的药品编号:");
scanf("%s", medicine.id);
getchar();
printf("请输入新的药品名称:");
fgets(medicine.name, 50, stdin);
printf("请输入新的药品单价:");
scanf("%f", &medicine.price);
printf("请输入新的库存数量:");
scanf("%d", &medicine.stock);
getchar();
printf("请输入新的药品品牌:");
fgets(medicine.brand, 50, stdin);
fseek(fp, -sizeof(Drug), SEEK_CUR); // 将文件指针移动回上一个位置
fwrite(&medicine, sizeof(Drug), 1, fp); // 将修改后的药品信息写回文件
printf("药品信息修改成功!\n");
found = 1;
system("pause");
system("cls");
break;
}
}
if (!found) {
printf("药品不存在!\n");
}
fclose(fp);
}
// 删除药品
void durg_delete() {
Drug medicine;
FILE *fp1, *fp2;
char id[20];
int found = 0;
fp1 = fopen("medicine.dat", "rb"); // 只读
fp2 = fopen("temp.dat", "wb"); // 创建临时文件,用于存储不需要删除的药品
printf("请输入要删除的药品编号:");
scanf("%s", id);
while (fread(&medicine, sizeof(Drug), 1, fp1) == 1) { // 循环读取文件中的药品信息
if (strcmp(medicine.id, id) != 0) { // 如果不是要删除的药品,则将药品信息写入临时文件
fwrite(&medicine, sizeof(Drug), 1, fp2);
} else {
found = 1; // 标记已经找到了要删除的药品
}
}
fclose(fp1);
fclose(fp2);
if (remove("medicine.dat") == 0) {
printf("File removed successfully.\n");
} else {
perror("Error deleting file");
exit(EXIT_FAILURE);
}
if (rename("temp.dat", "medicine.dat") == 0) {
printf("File renamed successfully.\n");
} else {
perror("Error renaming file");
exit(EXIT_FAILURE);
}
if (found) {
printf("药品删除成功!\n");
} else {
printf("药品不存在!\n");
}
system("pause");
system("cls");
}
//按编号排序并显示药品信息
void id_sequence() {
Drug medicines[100];
Drug temp;
FILE *fp;
int n = 0;
fp = fopen("medicine.dat", "rb"); // 只读
while (fread(&medicines[n], sizeof(Drug), 1, fp) == 1) { // 循环读取文件中的药品信息,将其放入数组中
n++;
}
for (int i = 0; i < n - 1; i++) { // 冒泡排序将编号大的药品往后放(升序法)
for (int j = 0; j < n - i - 1; j++) {
if (medicines[j].id > medicines[j+1].id) {
temp = medicines[j];
medicines[j] = medicines[j+1];
medicines[j+1] = temp;
}
}
}
printf("药品编号\t药品名称及单价\t 库存数量\t品牌\n");
for (int i = 0; i < n; i++) { // 显示药品信息
printf("%s\t\t%s\t\t%.2f元\t\t\t%d\t%s\n", medicines[i].id, medicines[i].name, medicines[i].price, medicines[i].stock, medicines[i].brand);
}
fclose(fp);
system("pause");
system("cls");
}
// 按单价排序并显示药品信息
void price_sequence() {
Drug medicines[100];
Drug temp;
FILE *fp;
int n = 0;
fp = fopen("medicine.dat", "rb"); // 只读
while (fread(&medicines[n], sizeof(Drug), 1, fp) == 1) { // 循环读取文件中的药品信息,将其放入数组中
n++;
}
for (int i = 0; i < n - 1; i++) { // 冒泡排序将价格高的药品往后放(升序法)
for (int j = 0; j < n - i - 1; j++) {
if (medicines[j].price > medicines[j+1].price) {
temp = medicines[j];
medicines[j] = medicines[j+1];
medicines[j+1] = temp;
}
}
}
printf("药品编号\t药品名称及单价\t 库存数量\t品牌\n");
for (int i = 0; i < n; i++) { // 显示药品信息
printf("%s\t\t%s\t\t%.2f元\t\t\t%d\t%s\n", medicines[i].id, medicines[i].name, medicines[i].price, medicines[i].stock, medicines[i].brand);
}
fclose(fp);
system("pause");
system("cls");
}
// 按库存数量排序并显示药品信息
void amount_sequence() {
Drug medicines[100];
Drug temp;
FILE *fp;
int n = 0;
fp = fopen("medicine.dat", "rb"); // 只读
while (fread(&medicines[n], sizeof(Drug), 1, fp) == 1) { // 循环读取文件中的药品信息,放入数组中
n++;
}
for (int i = 0; i < n - 1; i++) { // 运用冒泡排序将药品数量多的药品往后放(也是升序法)
for (int j = 0; j < n - i - 1; j++) {
if (medicines[j].stock > medicines[j+1].stock) {
temp = medicines[j];
medicines[j] = medicines[j+1];
medicines[j+1] = temp;
}
}
}
printf("药品编号\t药品名称及单价\t 库存数量\t品牌\n");
for (int i = 0; i < n; i++) { // 显示药品信息
printf("%s\t\t%s\t\t%.2f元\t\t\t%d\t%s\n", medicines[i].id, medicines[i].name, medicines[i].price, medicines[i].stock, medicines[i].brand);
}
fclose(fp);
system("pause");
system("cls");
}
// 统计指定品牌药品数量
void amount_brand() {
Drug medicine;
FILE *fp;
char brand[50];
char *find;
int count = 0;
fp = fopen("medicine.dat", "rb"); // 只读
printf("请输入要统计的药品品牌:");
getchar();
fgets(brand, 50, stdin);
while (fread(&medicine, sizeof(Drug), 1, fp) == 1) { // 循环读取文件中的药品信息
if (strcmp(medicine.brand, brand) == 0) { //读取到相同的药品名字的时候,count++
count++; // 统计数量
}
}
brand[strlen(brand)-1]='\0';
fclose(fp);
printf("品牌为“%s”的药品数量为: %d\n", brand, count);
system("pause");
system("cls");
}