跪求职工信息录入的需求分析,程序运行分析,程序框图

#include<stdio.h> 

#include<stdlib.h>  

#include<string.h>

struct workers

{

char jobNo[15];       //职工号

char name[15];        //姓名

char sex[15];         //性别

char birthday[15];    //出生年月

char degree[15];      //学历

char position[15];    //职务 

char salary[15];      //工资 

char addr[15];        //住址 

char tel[15];         //电话 

};

//类型定义语句  

typedef struct node

{

struct workers data;

struct node *next;

}Node;

//添加信息函数     "尾插法建表"

void Add(Node *worker)

{

Node *p, *q;

char n[10]; 

q = worker; 

while (q->next != NULL)

{

q = q->next;     

}

while (1)

{

printf("提示:输入0返回主菜单!\n");

printf("请输入职工号:");

scanf("%s", n);

if (strcmp(n, "0") == 0)

{

break;

}

p = (Node *)malloc(sizeof(Node));

strcpy(p->data.jobNo, n);

printf("请输入姓名:");

scanf("%s", p->data.name);

printf("请输入性别:");

scanf("%s", p->data.sex);

printf("请输入出生年月:");

scanf("%s", p->data.birthday);

printf("请输入学历:");

scanf("%s", p->data.degree);

printf("请输入职务:");

scanf("%s", p->data.position);

printf("请输入工资:");

scanf("%s", p->data.salary);

printf("请输入住址:");

scanf("%s", p->data.addr);

printf("请输入电话:");

scanf("%s", p->data.tel);

printf("提示:已经完成一条记录的添加!");

p->next = NULL;

q->next = p;      

q = p;        

}

}

//修改职工信息函数

int  change(Node *worker)

{

Node *p;

char find[20];   

p = worker->next;   

if (p == NULL)

{

printf("\n提示:没有资料可以修改!\n");

return 0;

}

printf("请输入要修改的职工号");

scanf("%s", find);

while (p != NULL) 

{

if (strcmp(p->data.jobNo, find) == 0)

{

break;

}

p = p->next;

}

if (p!=NULL)

{

int x;

while (1)

{

printf("完成修改请输入0,否则输入非0数字进行修改!");

scanf("%d", &x);

if (x == 0)

{

break;

}

printf(" 请输入新职工号: ");

scanf("%s", p->data.jobNo);

printf(" 请输入新职工姓名: ");

scanf("%s", p->data.name);

printf(" 请输入新职工性别: ");

scanf("%s", p->data.sex);

printf(" 请输入新职工出生年月: ");

scanf("%s", p->data.birthday);

printf(" 请输入新职工学历: ");

scanf("%s", p->data.degree);

printf(" 请输入新职工职务: ");

scanf("%s", p->data.position);

printf(" 请输入新职工工资: ");

scanf("%s", p->data.salary);

printf(" 请输入新职工住址: ");

scanf("%s", p->data.addr);

printf(" 请输入新职工电话: ");

scanf("%s", p->data.tel);

printf(" \n提示:该职工资料已经修改!\n ");

}

}

else 

printf("\n提示:没有你要修改的资料!\n ");

}

//输出职工信息函数

int  Disp(Node *worker)

{

Node *p;

p = worker->next;

if (p == NULL)

{

printf(" \n提示:没有信息可以显示!\n ");

return 0;

}

printf("\t\t\t\t显示结果\n");

printf(" \n职工号   姓名 性别 出生年月    学历 职务 工资 住址 电话 \n ");

while (p!=NULL)  

{

printf("\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

p = p->next;

}

}

//查询职工信息函数: 按职工号查询 按职工姓名查询

int  Cha_xun(Node *worker)

{

Node *p;

int sel;

char find[20];

p = worker->next;   

if (p==NULL) 

{

printf(" \n提示:没有资料可以查询!\n ");

return 0;

}

printf("\n提示:\n 输入 0---- 退出\t 输入 1----按职工号查询\t 输入 2-----按职工姓名查询\n");

printf("请选择:");

scanf("%d", &sel);

if (sel == 1)

{

printf("\n请输入你要查询分类的职工号:");

scanf("%s", find);

while (p!=NULL)  

{

if (strcmp(p->data.jobNo, find) == 0)

{

printf(" 职工号   姓名  性别 出生年月 学历 职务 工资 住址 电话 \n ");

printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

}

p = p->next;   

}

}

else if (sel == 2)

{

printf(" \n输入你要查询分类的职工姓名:");

scanf("%s", find);

while (p!=NULL)

{

if (strcmp(p->data.name, find) == 0) 

{

printf(" 职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话 \n ");

printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.jobNo, p->data.name,

p->data.sex, p->data.birthday, p->data.degree, p->data.position,

p->data.salary, p->data.addr, p->data.tel);

}

p = p->next;

}

}

else if (sel == 0)

return 0;

}

//删除职工信息函数

int  Delete(Node *worker)

{

Node *p, *r;

char find[10];

p = worker->next;

if (p == NULL)

{

printf("提示:没有职工信息可以删除!\n ");

return 0;

}

printf(" \n提示:请输入你要删除的职工号!\n ");

scanf("%s", find);

while (p != NULL)

{

if (strcmp(p->data.jobNo, find) == 0)

{

break;

}

p = p->next;

}

if (p!=NULL)

{

r = worker;

while (r->next != p)

{

r = r->next;

}

r->next = r->next->next;    

}

}

//将职工信息保存到文件中

void save(Node *worker)

{

int n;

Node *p = NULL;

FILE *fp;    

printf("是否保存到文件?( 1-----保存!,0-----不保存! )");

scanf("%d", &n);

if (n == 1)

{

if (worker->next == NULL)

{

printf(" 没有记录!");

}

else

{

p = worker->next;

}

if ((fp = fopen(" 职工信息管理系统.txt ", " wb ")) == NULL)  

{

printf(" 文件不能打开!\n");     

}

while (p != NULL)   

{

fprintf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,

p->data.birthday, p->data.degree, p->data.position, p->data.salary,

p->data.addr, p->data.tel);        

p = p->next; 

}

fclose(fp);  

}

}

//读取职工信息 

void Du_qu(Node *worker)

{

Node *p;

FILE *fp; 

if ((fp = fopen("职工信息管理系统.txt", "rb")) == NULL)     

{

printf("文件不能打开!\n ");

}

p = worker->next;

while (p!=NULL)

{

fscanf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,

p->data.birthday, p->data.degree, p->data.position, p->data.salary,

p->data.addr, p->data.tel);     

p=p->next;

}

fclose(fp);

}

//主函数实现 

int main()

{

Node *worker;

int flag;

worker = (Node*)malloc(sizeof(Node));

worker->next = NULL; 

  while(1)

  {

  printf("\t职 工 信 息 管 理 系 统\n");

printf("==================菜 单==================\n ");

printf("1.输入职工信息\n ");

printf("2.修改职工信息\n ");

printf("3.浏览职工信息\n ");

printf("4.查询职工信息\n ");

printf("5.删除职工信息\n ");

printf("6.读取职工信息\n ");

printf("0.退出\n ");

printf("输入你选择的序号:");

scanf("%d", &flag);

switch (flag)

{

case 0:  printf(" \n提示:退出系统!\n ");  break;

case 1: Add(worker); save(worker);  break;    //添加职工信息,保存到文件中 

case 2:  change(worker);  break;           //修改职工信息 

case 3:  Disp(worker);  break;             //显示职工信息 

case 4:  Cha_xun(worker);  break;           //查询职工信息 

case 5:  Delete(worker);  break;          //删除职工信息 

case 6:  Du_qu(worker);  break;             //读取职工信息 

default: printf("提示:输入错误!\n ");

}

}

}

 

参考GPT和自己的思路:

首先,这个程序是一个职工信息管理系统,可以实现添加、修改、浏览、查询、删除和读取职工信息的功能。

关于需求分析,程序需要实现以下功能:

  1. 添加职工信息:用户可以添加新的职工信息并存储在程序中。

  2. 修改职工信息:用户可以选择职工号或姓名进行修改,并将修改后的信息更新到程序中。

  3. 浏览职工信息:用户可以查看当前存储在程序中的所有职工信息。

  4. 查询职工信息:用户可以按照职工号或姓名进行查询,并显示查询结果。

  5. 删除职工信息:用户可以选择需要删除的职工信息,并将其从程序中删除。

  6. 读取职工信息:程序可以从文件中读取之前保存的职工信息,并存储在程序中。

关于程序运行分析,程序采用了链表结构存储职工信息,使用了尾插法建表,可以动态添加职工信息。在修改、删除和查询操作时,程序使用了循环遍历链表来查找对应的节点,并进行相应的操作。在保存和读取职工信息时,程序通过文件操作来实现。

关于程序框图,程序采用了顺序结构,主函数中使用了无限循环来实现程序的持续运行,通过switch语句来根据用户选择的序号执行相应的操作函数。每个操作函数都可以调用其他的函数来实现相应的功能。整个程序的整体框架如图所示: