实施一个调度系统,可用于安排一个小时的会议时间。一个会议以以下数据表示。 描述是对会议的描述,它是一个可以有任意属性的字符串 长度不同会议的会议描述可能相同。 月是会议时间的月份,是1和12之间的整数。 日是会议时间的月日,是1和31之间的整数。 小时是一天中会议时间的小时,是0到23之间的整数。 对于系统,每个会议时间都必须是唯一的。它应该能够支持任意数量的会议。
在所有任务,中,命令如下。
1.A是Add命令,后面跟着许多与任务相关的参数。将向程序数据库中添加一个 新的条目。
2.D是任务依赖的修改数据库命令。检查任务说明。
3.L是没有参数的rist命令。 将程序数据库的排序列表打印到标准输出流中。
4. W是带有文件名参数的“写 ”命令。 将程序数据库写入到一个文本文件中。
W
5. O是带有文件名参数的道路命令。 从指定的文本文件中加载数据库。
O
6 . Q是没有参数的duit命令。 在发布程序数据库后,将退出该程序。
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
struct meet
{
char description[20];
int month;
int day;
int hour;
} ;
struct meet meets[10];
void O_fun(char* filename)
{
FILE *fp = NULL;
if ( (fp = fopen(filename, "r+")) == NULL )
{
puts("Open file failed\n");
}
else
{
puts("Open file success\n");
int i=0;
while (!feof(fp))
{
fscanf(fp, "%s %d.%d at %d", meets[i].description, &meets[i].day,&meets[i].month,&meets[i].hour);
i++;
}
fclose(fp);
}
}
void W_fun(char* filename)
{
FILE *fp = NULL;
if ( (fp = fopen(filename, "wt+")) == NULL )
{
puts("Open file failed\n");
}
else
{
puts("Open file success\n");
for (int i = 0; i<10; i++)
{
if (meets[i].day!=0)
{
fprintf(fp, "%s %d.%d at %d\n", meets[i].description, meets[i].day,meets[i].month,meets[i].hour);
}
}
fclose(fp);
}
}
void L_fun()
{
for ( int j=0; j<10; ++j)
{
if (meets[j].day!=0)
{
printf("%s %d %d %d\n", meets[j].description, meets[j].month, meets[j].day,meets[j].hour);
}
}
}
void D_fun(int month,int day,int hour)
{
int n=10;
int i = 0;
int j=0;
while(1)
{
if ((!strcmp(&meets[i].day, day)) && (!strcmp(&meets[i].month, month)&&(!strcmp(&meets[i].hour, hour))) )
{
for(j=i;j<10;j++)
{
meets[j]=meets[j+1];
}
break;
}
else
i++;
n--;
if (n == 0)
{
printf("No found!");
break;
}
}
}
void Q_fun()
{
exit(0);
}
int main(void)
{
char coontrl[2];
char command[1000];
int index=0;
for(;;)
{
fgets(coontrl, 2, stdin);
if (strcmp(coontrl, "A") == 0)
{
fgets(command,998,stdin);
sscanf (command," %s %d %d %d",meets[index].description, &meets[index].month, &meets[index].day, &meets[index].hour);
printf(" SUCCESS\n");
index++;
}
else if (strcmp(coontrl, "D") == 0)
{
int dellmonth[1];
int day[1];
int hour[1];
fgets(command,998,stdin);
sscanf (command," %d %d %d",&dellmonth,&day,&hour);
D_fun(dellmonth,day,hour);
printf(" SUCCESS\n");
}
else if (strcmp(coontrl, "W") == 0)
{
char filename[100];
fgets(command,998,stdin);
sscanf (command,"%s ",&filename);
char *dest_str;
dest_str = (char *)malloc(sizeof(char) * (sizeof(filename) + 1));
strncpy(dest_str, filename, sizeof(filename));
W_fun(dest_str);
printf(" SUCCESS\n");
}
else if (strcmp(coontrl, "L") == 0)
{
L_fun();
printf(" SUCCESS\n");
}
else if (strcmp(coontrl, "O") == 0)
{
char filename[100];
fgets(command,998,stdin);
sscanf (command,"%s ",&filename);
char *dest_str;
dest_str = (char *)malloc(sizeof(char) * (sizeof(filename) + 1));
strncpy(dest_str, filename, sizeof(filename));
O_fun(dest_str);
printf(" SUCCESS\n");
}
else if (strcmp(coontrl, "Q") == 0)
{
printf(" SUCCESS\n");
Q_fun();
}
else
{
printf("Invalid command %s\n",coontrl);
}
}
return 0;
}
学习记录:
1.fgets和sscanf的运用