《c语言课程设计》---职工信息管理系统

c语言课程设计》总体计划及文档

 一:总体计划

1 题目确定及十天计划;

2 写文档•确定数据结构、返回值、写出详细设计思路;

3 菜单函数;

4 录入函数;

5 浏览函数;

6 查询函数;

7 修改函数;

8 删除函数;

9 写课程设计说明书;

10 创新阶段•增加功能•

二:文档

1:需求分析

  1.1编写目的

1.2需求概述

1.3需求说明

2:总体设计

  2.1 功能模块图

   2.2 数据结构

   2.3程序流程图

3:详细设计

3.1数据结构

  3.2各个功能模块的处理流程

1需求分析

1.1编写目的:  

通过对用户需求进行调查及分析,写出文档需求分析。它可以作为项目设计的基本准则,也可以作为系统分析员进行系统分析和测试人员进行测试的手册。

1.2 需求概述:    

 设计一个职工信息管理系统,使之有以下功能:

1)职工信息的录入功能

2)职工信息的浏览功能

3)职工信息查询功能

4)职工信息删除功能

5)职工信息修改功能

1.3需求说明

1)职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。

2)录入职工信息要求以文件形式保存,并可对其浏览、查询、修改删除等基本操作。

3)职工信息的显示要求有一定的规范格式。

4)对职工信息按照编号和姓名另种方式查询

5)职工信息修改逐个进行,修改不影响其他职工信息

6)所设计的系统以菜单方式工作,兼容异常情况

、总体设计

2.1 功能模块图: 

其中:

(1) 菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择,并进而调用其他模块实现相应的功能。

(2) 信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等。

(3) 信息浏览模块完成已录入职工信息的显示。

(4) 信息查询模块完成职工信息的查询,查询时对应有按编号查询和按姓名查询两种方式。

(5) 信息修改模块完成职工信息的修改功能。

(6) 信息删除模块完成职工信息的删除功能。

2.2数据结构

本系统主要数据结构:职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工不同属性来处理。

2.3程序流程图:

系统执行应从功能菜单开始,依据用户选择进行后续处理,直到用户退出为止,期间对用户的选择做出判断和异常处理,系统流程图如下:

3详细设计:

编写目的

   根据 总体设计说明书,在总体设计说明说之上,对系统进行详细设计,以便下一步进行程序编码工作。

            详细设计

3.1数据结构

(1) 性别:enum Sex {male,female};

(2) 学历:enum Education{high,junior,college,master,doctor};

(3) 日期:

                    Struct date 

              {

Int year;

Int month;

Int day;

};

     (4)职工信息;

         Struct Info

         {

char num[5];                /*职工号*/

char name[8];               /*姓名*/

enum Sex sex;               /*性别*/

struct Date birthday;           /*出生年月*/

enum Education education;      /*学历*/

char duty[8];                  /*职务*/

double wage;                  /*工资*/

char addr[12];                  /*地址*/

char phone[8];                  /*电话*/

};

3.2各个功能模块的处理流程

对应于总体设计时的系统模块图,各个功能模块的处理流程如下:

1)信息输入模块

      打开职工信息文件;

While(继续输入)

   {

读入职工信息;

将读入的信息添加到职工信息文件中;

提示是否继续输入;

}

关闭职工信息文件;

2)信息浏览模块

       打开职工信息文件;

       While(不到文件结束)

{

从文件中顺序读出一个职工的信息;

按指定格式输出该职工的信息;

}

关闭职工信息文件;

3)信息查询模块

     While(继续查询)

     {

  If(按编号查询)

  {

     读入查询的职工编号;

     打开职工信息文件;

     While(不到文件结束)

     {

        顺序读出一个职工的信息;

        If(该职工信息的编号符合条件)

            输出该职工的信息;

}

关闭职工信息文件;

提示共有几条符合条件的记录;

}

   else  if(按姓名查询)

   {

      读入查询的职工姓名;

      打开职工信息文件;

      while(不到文件结束)

      {

         顺序读出一个职工的信息;

         If(该职工信息的姓名符合条件)

             输出该职工的信息;

}

关闭职工信息文件;

提示共有几条符合条件的记录;

}

else 

  提示输入不合适;

提示是否继续查询;

}

4)信息修改模块

     while (继续修改)

     {

        打开职工信息文件;

        打开临时文件;

        提示并读入待修改的职工的编号;

        while (不到文件结束)

        {

           顺序读出一个职工的信息;

           if (该职工信息的编号符合条件)

               将职工的信息进行修改;

           将职工的信息写入临时文件中;

}

关闭原信息文件;

关闭临时文件;

删除原信息文件;

将临时文件的名字改为原信息文件的名字;

}

5)信息删除模块

     While(继续删除)

     {

        提示并读入待删除的职工号;

        打开职工信息文件;

        查找是否有符合条件的职工记录;

        If(有符合条件的记录)

        {

          创建一个新的临时文件;

          While(原信息文件中记录未读完)

          {

            读出原信息文件中的下一条记录;

            If(此条记录不是待删除记录)

              写入临时文件中去;

}

关闭原文件信息;

关闭临时文件;

删除原信息文件;

将临时文件的名字改为原信息文件的名字;

}

Else

  提示没有符合的记录存在;

}

6)菜单选择模块

     给出信息提示;

     清屏;

     绘制菜单(包含输入  显示  查询  修改  删除  退出 );

     提示菜单选择并读入到变量;

     返回变量的值;

#include<stdio.h>   

#include<string.h>

#include<stdlib.h>

#include<conio.h>

struct Info

{

  char num[10];/*职工号*/

  char name[15];/*姓名*/

  char  sex[3];/*性别*/

  char education[20] ;/*文化程度*/

  char phone[20];/*电话*/

  char duty[20];/*职务*/

  char  addr[30];/*住址*/

  double wage ; /*工资*/

};

/*菜单函数*/ 

char  menu()

char n;

system("CLS");                 /*清屏函数  其头文件为“#include<stdlib.h>*/

    system("color 0A");            /*屏幕和字体颜色控制*/

 printf("欢迎进入系统:\n");

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

 printf("\t******************************菜单*****************************\n");

 printf("\t***************************************************************\n");

 printf("\t|***********                                       ***********|\n");      

 printf("\t|*******                                                ******|\n");        

 printf("\t|****      1.职工信息录入              2.职工信息显示     ****|\n");    

 printf("\t|****                                                     ****|\n");    

 printf("\t|****      3.职工信息查询              4.职工信息删除     ****|\n");    

 printf("\t|****                                                     ****|\n");    

 printf("\t|****      5.职工信息修改              6.退出             ****|\n");    

 printf("\t|*********                                  XX制作  ********|\n");    

 printf("\t***************************************************************\n");

 printf("\t***************************************************************\n");

 printf("选择1-6:[ ]\b\b");     

 while(1)

 

 {

 n=getchar();

 if(n<'1'||n>'6')printf("输入错误,请重新输入1-6:[ ]\b\b");

      else 

 break;

 }return n;

 } 

void append()    /*信息输入函数*/

{

 struct Info info;

 FILE *fp;

 char ch;

char temp[10];

if((fp=fopen("f:\\inform.txt","ab"))==NULL)

 {

  printf("\tCan't open the inform file!");

  getch();

  exit(1);

 }

 do

 {

    printf("\t职工号:");

    fflush(stdin);                  /*清除缓冲区域*/

    gets(info.num);

    printf("\t姓名:");gets(info.name);

printf("\t性别:");gets(info.sex);

    printf("\t文化程度:"); gets(info.education);

printf("\t工资:");gets(temp); info.wage=atof(temp);

printf("\t职务:");gets(info.duty);

printf("\t家庭住址:");gets(info.addr);

printf("\t联系电话:");gets(info.phone);

fwrite(&info,sizeof(info),1,fp);

printf("\tAny more?(Y/N)):[ ]\b\b");

ch=getchar();getchar();

   }while(ch=='Y'||ch=='y');

    fclose(fp);

  }

void print1()

 {

printf("工号\t""姓名\t""性别\t""文化程度\t""职务\t""工资\t""地址\t""电话\n");

}

 void print2(struct Info info)

 {

  printf("%-8s%-10s",info.num,info.name);

 printf("%-8s%-14s",info.sex,info.education);

    fflush(stdin);                  /*清除缓冲区域*/

 printf("%-8s%-8.2lf",info.duty,info.wage);

  printf("%-8s%-8s\n",info.addr,info.phone);

 }

void display()                   /*职工信息显示函数*/

  {

    struct Info info;

FILE * fp;

int total=0;

if((fp=fopen("f:\\inform.txt","rb"))==NULL)

{

  printf("\tCan not open the inform file!");

  getch();

  exit(1);

}

while(fread(&info,sizeof(info),1,fp)==1)

{

  total++;

  if(total==1)print1();

  print2(info);

  if((total!=0)&&(total%5==0))

  {

    printf("\n\n\tPress any key to continue......");

getch();

puts("\n\n");

print1();

  }

}

fclose(fp);

printf("\n\n\t一共有%d个信息!!!",total);

getch();

  }

 

void search()/*信息查询函数*/

  {

char f;

   struct Info info;

   FILE * fp;

   int flag; /*flag1按编号查询,flag2按姓名查询*/

   int total=0 ;/*记录符合条件的纪录的个数*/

   if((fp=fopen("f:\\inform.txt","rb"))==NULL)

   {

    printf("\t打开文件失败!");

getch();

exit(1);

   }

   do

   {

    rewind(fp);

printf("\n\n查询(1:工号 2:姓名):[ ]\b\b");

while(1)

{

 scanf("%d",&flag);getchar();

 if(flag<1||flag>2)

 printf("输入错误!!!请重新输入(1:工号 2:):[ ]\b\b");

  else

break;

}

if(flag==1)  /*按编号进行查询*/

{

 char ch[10];

 printf("请输入你想查找的职工号:");

 gets(ch);

 total=0; /*符合条件的记录数*/

 while(fread(&info, sizeof(info),1,fp)==1)

 if(strcmp(ch,info.num)==0)

 {

  total++;

 if(total==1)

  print1();

  print2(info);

 }

}

else  /*按姓名进行查询*/

{

 printf("请输入你想查找的职工的姓名:");

 char ch[15];

 gets(ch);

 total=0;

 while(fread(&info,sizeof(info),1,fp)==1)

 if(strcmp(ch,info.name)==0)

 {

  total++;

 if(total==1)print1();

  print2(info);

 }

}

printf("\n\n\tT一共有 %d 条记录!\n",total);

printf("要继续查找吗?(Y/N):[ ]\b\b");

f=getchar();getchar();

   }while(f=='Y'||f=='y');

   fclose(fp);

  }

void Delete()                   /*职工信息删除函数*/

 { 

  struct Info info;

  FILE *fp1,*fp2;

  int flag;

  char ch[10];

  char f;

  do

  {

   if((fp1=fopen("f:\\inform.txt","rb"))==NULL)

   {

    printf("\t文件打开失败!");

getch();

exit(1);

   }  

   if((fp2=fopen("f:\\temp.txt","wb"))==NULL)

   {

    printf("\t文件打开失败!");

getch();

exit(1);

   }

    printf("请输入你要删除的职工号:");

    fflush(stdin);                  /*清除缓冲区域*/

    gets(ch);

    flag=0;

   while(fread(&info,sizeof(info),1,fp1)==1)

   {

      if(strcmp(ch,info.num)==0)

  {

   print1();

   print2(info);

       fflush(stdin);  

   flag=1;

  continue;

  } 

  

  fwrite(&info,sizeof(info),1,fp2);

  

   }

      fclose(fp1);

      fclose(fp2);

      if(flag==1)

  { 

        printf("删除成功!\n");

        remove("f:\\inform.txt");

        rename("f:\\temp.txt","f:\\inform.txt");

  }

      else

  printf("找不到记录!\n");

      printf("还要继续删除吗?(Y/N):[ ]\b\b");

  f=getchar();

  getchar();

  }while(f=='Y'||f=='y');

  

}

 

 

void modify()  /*职工信息修改函数*/

 {

  struct Info info;

  FILE *fp1,*fp2;

  int flag;

  char ch[10];

  char f;

  char temp[10];

  

  do

  {

         if((fp1=fopen("f:\\inform.txt","rb"))==NULL)

 {

      printf("\t文件打开失败!");

      getch();

      exit(1);

 }

       if((fp2=fopen("f:\\temp.txt","wb"))==NULL)

   {

     printf("\t文件打开失败!");

     getch();

      exit(1);

   }

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

   fflush(stdin);

       gets(ch);

       flag=0;

while(fread(&info,sizeof(info),1,fp1)==1)

{

   if(strcmp(ch,info.num)==0)

   {

  print1();

  print2(info);

  printf("\n\n请输入新的信息:\n");

  printf("\t职工号:");gets(info.num);

  printf("\t姓名:");gets(info.name);

  printf("\t性别:"); gets(info.sex);

  printf("\t问化程度:");gets(info.education);

      printf("\t职务:");  gets(info.duty);

  printf("\t工资:");  gets(temp); info.wage=atof(temp);

  printf("\t家庭住址:"); gets(info.addr);

  printf("\t联系电话:");   gets(info.phone);

   flag=1;

   }

fwrite(&info,sizeof(info),1,fp2);

}

       fclose(fp1);

       fclose(fp2);

      if(flag==1)

  {

      printf("修改成功!\n");

remove("f:\\inform.txt");                   /*删除inform文件*/

    rename("f:\\temp.txt","f:\\inform.txt");        /*temp文件改名为inform*/

  }

    else 

printf("没有记录!\n");

    printf("还要继续修改吗?(Y/N):[ ]\b\b");

    f=getchar();  getchar();

  }while(f=='Y'||f=='y');

}

/*main函数*/

void main()

{   

char mi[6];

printf("请输入密码:");

for(;;)

    {

   scanf("%s",&mi);

       if(strcmp(mi,"muqin")==0)

        while(1)

        switch(menu())

{  case '1':append() ;break;

       case'2':display();break;

       case'3':search();break;

       case'4':Delete();break;

       case'5':modify();break;

       case '6':printf("谢谢使用,再见!!!\n\n");exit(0);break;

}

    else

    printf("输入错误!!!请重新输入:");

}

}

评论 9 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

西_北

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值