画函数的流程图,每个函数一个,必采纳

共九个,inputoption inputyn inputelement insert removeal create load mainmenu mainmenu-1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char InputOption(char L, char R); //输入选项,获取一个在给定L、R之间的字符
char InputYN(char *warning); //输出给定提示,要求输入Y或N
void InputElement(struct Signal *p,int opt); //用于修改指定信号机的某一项信息 opt为5时输入所有信息
void insert(struct Signal *, struct Signal *); //在相邻信号机间插入一台新信号机
void removeone(struct Signal *); //删除一条指定的信号机数据
void removeall(); //删除所有信号机数据
struct Signal *Query_name_Accurate(char *); //根据准确的信号机名称查找信号机信息
void Query_name_Fuzzy(char *); //查找所有名称中包含关键词的信号机 输出所有结果
void showone(struct Signal *p); //输出一台信号机的信息
void showall(); //输出所有信号机的信息
void MainMenu();
void removeall();

int amount; //记录信号机数量
struct Signal *Head; //链表头指针

int main(void)
{
MainMenu(); //主菜单
return 0;
}

struct Signal
{
char Name[10]; //信号机名称
int KB; //开放表示 0不开放 1开放
float Pos; //位置根据平面图位置拟定
int Type; //信号机性质,列车信号机取1,调车信号机取0
struct Signal *next,*front; //后一架信号机指针,前一架信号机指针
};

void create(); //创建链表 人工录入信号机信息
void load(); //创建链表 从文件导入信号机信息
void save(); //导出信号机数据

char InputOption(char L, char R)
{
char temp[8]; //存储未判断合法性的输入数据
do
{
printf("\n输入选项编号进行选择:");
scanf("%7s",temp);
while(getchar()!= '\n');
}while(temp[1]!='\0' || !(temp[0]>=L && temp[0]<=R) ); //只允许输入一个字符(\n不计),输入字符必须在给定的L与R之间
return temp[0];
} //用于获取用户输入的编号

char InputYN(char *warning)
{
char temp[8]; //存储未判断合法性的输入数据
do
{
printf("%s(Y/N)",warning); //提示内容通过参数传入
scanf("%7s",temp);
while(getchar()!= '\n');
}while(temp[1]!='\0' || !(temp[0]=='Y'||temp[0]=='N')); //只允许输入一个字符(\n不计),输入字符必须为Y或N

return temp[0];

} //输出给定提示 获取'Y'和'N'
void InputElement(struct Signal *p,int opt)
{
char temp[8]; //存储未判断合法性的输入数据

switch(opt)
{
case 1:
    printf("输入信号机名称:");
    scanf("%9s",p->Name);
    while(getchar()!= '\n');
    break;
case 2:
    do
    {
        printf("输入信号机开放状态(0-闭 1-开):");
        scanf("%7s",temp);
        while(getchar()!= '\n');
    }while(temp[1]!='\0' || !(temp[0]=='0' || temp[0]=='1') ); //输入只能为'0'或'1'
    p->KB=temp[0]-'0';
    break;
case 3:
    do
    {
        printf("输入信号机位置:");
        scanf("%7s",temp);
        while(getchar()!= '\n');
    }while(!(p->Pos=atof(temp))); //输入只能为有效的数字 超过7位只取前7位(含小数点)
    break;
case 4:
    do
    {
        printf("输入信号机性质(0-调车 1-列车):");
        scanf("%7s",temp);
        while(getchar()!= '\n');
    }while(temp[1]!='\0' || (!(temp[0]=='0' || temp[0]=='1')) ); //输入只能为"0"或"1"
    p->Type=temp[0]-'0';
    break;
case 5:
    InputElement(p,1);
    InputElement(p,2);
    InputElement(p,3);
    InputElement(p,4);
    break; //输入所有信息
}

}

extern int amount;
extern struct Signal *Head;

void create()
{
struct Signal *p1,*p2;
char flag; //用于判断是否继续添加信号机
p1=p2=(struct Signal *)malloc(sizeof(struct Signal));

InputElement(p1,5); //输入信号机信息

Head=p1; //指定链表的头指针
Head->front=NULL; //置空第一项的前驱指针
Head->next=NULL; //置空第一项的后继指针
amount=1;

flag=InputYN("是否继续添加信号机?");
while (flag=='Y')
{
    flag='\0'; //将是否继续的flag置空
    p2=p1;
    
    p1=(struct Signal *)malloc(sizeof(struct Signal));
    InputElement(p1,5); //输入信号机信息

    p1->front=p2; //建立新一项的前驱指针
    p2->next=p1; //修改前一项的后继指针
    p1->next=NULL; //置空新一项的后继指针
    amount++;

flag=InputYN("是否继续添加信号机?");
}

}

void load()
{
FILE *fp=NULL;
fpos_t position; //用于记录目前在文件中的位置
struct Signal *p1,*p2;

fp=fopen("Signal.txt","r");
if(fp==NULL)
{
    printf("文件不存在!\n");
    system("pause");
    return;
}

fgetpos(fp,&position);
fseek(fp,0,SEEK_END);
if(ftell(fp)==0)
{
    printf("文件为空!\n");
    system("pause");
    return;
}

fsetpos(fp, &position);
p1=p2=(struct Signal *)malloc(sizeof(struct Signal));

fscanf(fp,"%s\t%d\t%f\t%d\n",p1->Name,&p1->KB,&p1->Pos,&p1->Type);
Head=p1; //指定链表的头指针
Head->front=NULL; //置空第一项的前驱指针
Head->next=NULL; //置空第一项的后继指针
amount=1;

while (!feof(fp))
{
    p2=p1;
    
    p1=(struct Signal *)malloc(sizeof(struct Signal));
    fscanf(fp,"%s\t%d\t%f\t%d\n",p1->Name,&p1->KB,&p1->Pos,&p1->Type);

    p1->front=p2; //建立新一项的前驱指针
    p2->next=p1; //修改前一项的后继指针
    p1->next=NULL; //置空新一项的后继指针
    amount++;
}
fclose(fp);

}
void MenuTitle(char *);
void MainMenu_1();

void MainMenu()
{
char option; //存储用户选择
int flag=1; //为0时退出主菜单 程序结束

while(flag)
{
    MenuTitle("主菜单");
    printf("1.信号机生成登记\n");
    printf("0.保存信号机信息并退出\n");

    option=InputOption('0','3');
    switch(option)
    {
    case '1':
        MainMenu_1();
        break;
    case '0':
        option=InputYN("保存后将自动退出程序,你确定要继续吗?");
        if(option=='Y')
        {
            flag=0;
        }
        break;
    }
}

}

void MenuTitle(char *title)
{
system("cls");
printf("==========信号机管理系统==========\n");
printf("当前信号机数量:%d\n\n",amount);
printf("【%s】\n",title); //在【】内显示当前菜单的名称
}
void MainMenu_1()
{
char option;
if(amount>0)
{
option=InputYN("该操作会清除原有的信号机数据,你确定要继续吗?");
if(option=='N')
{
return; //返回主菜单
}
else if(option=='Y')
{
removeall(); //清除原有数据
}
} //已有信号机数据时进行提示

MenuTitle("信号机生成登记");
printf("1.从文件中导入\n");
printf("2.人工录入\n");

option=InputOption('1','2');
switch(option)
{
case '1':
    load();
    break;
case '2':
    create();
    break;
}

}

这个题目太大了, 请一个函数提一个问题。