用C语言实现一个简单的管理系统

相比于简单的C语言程序,用C语言写一个管理系统就显得相对复杂很多。在写代码之前,我们首先应有应有一个系统的基本框架,如该系统应该要实现那一些功能,这里我们以“员工管理系统”为例,我们应该建立一个菜单,读取文件的数据并创建链表,将链表中的信息写进文件,删除结点,增加结点,修改结点,以及链表的遍历。当我们明确一个系统应该要实现的功能后,便找到了问题的突破口,接下来只需要将各个功能用函数一一实现即可。

我们接下来以"员工管理系统为例",来进行具体的分析:
为了方便阅读后面文章的代码,我们这里将h设为头指针,结构类型为EMP,结构成员有员工编号number,员工年龄age,员工性别sex,员工姓名name。

1.增加结点与增加员工信息
为使系统代码更加简单化,我们在写"读取文件的数据并创建链表"这部分函数时,可以调用增加结点函数,简化代码。同时在增加员工信息时我们同样可以调用增加结点的函数,减少主函数的代码量,使主函数更加具有可读性。

void add(EMP *p2) //增加结点函数
{
EMP *p1; / /EMP为结构体,再定义一个结构指针
p1=h->next; //h为头指针
if(h==null)
{
p1=h->next; //链表为空时
}

  else
   {
        while(p1 != null)
        {
           p1=p1->null;     //找到尾节点
        }
        p2=p1->next;
        p2->next=null;
   }

}

add information() //增加员工信息
{
EMP *p; //定义结构指针存放信息
p=(EMP *)malloc(sizeof(EMP)); //动态分布内存
printf(“please input the employee’s information :(number ,age ,sex ,name)\n”);
scanf("%d%d%s%d",&p->number,&p->age,p->sex,p->name);
add§;
}

用户操作时用的使 add information()函数,而实际上实现该功能的是add(EMP *p2)函数,这样大大减少了主函数的代码量,增加程序的可读性。

总的来说,该部分函数的难点可能在于对尾节点的理解和判断,巧妙的使用while循环便解决了这个问题。

2.删除结点与删除员工信息
同理在删除结点上,我们同样可以将删除用户信息和删除结点联系在一起。简化主函数代码的同时,是程序的条理性变得更好。

void del(char name[20]) //删除结点
{
EMP *p1,*p2;
int flag=0;

 p1=h->next;
 p2=p1->next;
 
 while(p2->next != null)   //保证不是尾节点
     {
          if((strcmp(name,p2->name))==null) 
          {
             p1->next=p2->next;
             free(p2);
             flag=1;
             break;
          }
          p1=p2;
          p2=p2->next;
     }
     if(flag==0)
         printf("no exist this people !");
     else
        printf("succeed !");

}

void del_information()
{
char name[20];
printf(“please input the employee’s name:”);
scanf("%s",name);
void del(name);
}

3.读取文件并创建链表
此函数的功能在于读取文件的同时,将文件的信息存到链表中,存储信息时,我们可以调用add(EMP *p2) 函数来简化代码。实现该功能关键是将创建链表和读取文件同时进行。以下的while循环就巧妙的实现了这个操作。

void load();
{
FILE *fp;
fp=fopen(“文件路径”,“文件的打开方式”);
if(fp == NULL)
{
printf(“error ! \n”);
return; //如果文件打开失败,返回到调用函数的地方
}

 while(!feof(fp))
 {
   EMP *P=(EMP *)malloc(sizeof(EMP));
   fsacnf(fp,"%d%d%s%s",&p->number,&p->age,p->sex,p->name);
   add(p);   //函数调用增加结点
 }
 printf("finish read !");
 
 fclose(fp);           //关闭文件

}

4.将链表中的信息存储到文件
在进行这一部分操作时,难点在于要同时进行文件信息的存储和链表的遍历。用while语句便可以巧妙的实现二者同时进行。

//将链表中的信息存储到文件
void save (EMP *h)
{
    FILE *fp;
    EMP *p;
    fp=fopen("文件的打开路径","打开方式"); //打开文件
    
    if(fp=null)           //如果文件打开错误,则返回调用函数的地方
    {
        printf("error !");
        return ;
    }
    p=h->next;       //将p初始化为头结点,遍历链表
    
    while(p->next != null)
    {
       fprintf(fp," %d  %d  %s  %s  \n",p->number,p->age,p->sex,p->name);
       p=p->next;
    }
    
    fclose(fp);      //关闭文件
   
}

5.链表结点的修改和员工信息修改

显然类似于增加结点与增加员工信息和删除结点与删除员工信息,为例主函数的简洁性,我们可以将这两个函数联系起来,二者形成调用与被调用关系。也就是说,用户看到的函数是"/员工信息修改函数",而实际修改信息的是"修改链表结点函数"。这样大大增加了函数的可读性。

//修改员工信息
void update_employee(EMP *h)
{
     char name[10];
     prinft("input the employee's name:\n");
     sacnf("%s",name);
     updatedoc(name,h);    //调用修改结点函数
}

//修改结点信息
void updatedoc(char name[10],EMP *h)
{
    EMP  *p;
    p=h->next;       //将指针p初始化为头结点,以此找到相应的结点
    
    while ((strcmp(name,p->name)) != 0)
    {
           p=p->next;
    }
        
    printf("input the employee's age:");
    scanf("%d",&p->age);
    printf("input the employee's sex:");
    scanf("%s",p->sex);
    printf("input the employee's name:\n");
    scanf("%s",p->name);
  
}

6.遍历和显示菜单
这两部分相对来说应该比较简单,前者即是对链表的遍历,后者需要注意的是菜单显示的美观性。

以上即是对用C语言编写简单管理系统的分析。

  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,宿舍管理系统可以包含以下功能: 1. 学生信息管理:包括学生基本信息、入住信息、退宿信息等。 2. 宿舍信息管理:包括宿舍基本信息、宿舍楼信息、房间信息等。 3. 入住管理:包括学生入住申请、宿舍管理员审核、宿舍分配等。 4. 退宿管理:包括学生退宿申请、宿舍管理员审核、宿舍清理等。 5. 统计报表:包括入住率、退宿率、宿舍使用情况等统计数据。 以下是用C语言实现宿舍管理系统的思路: 1. 定义结构体来存储学生信息、宿舍信息等数据。 2. 使用链表来存储学生信息、宿舍信息等数据,方便查询和管理。 3. 设计菜单界面,包括学生信息管理、宿舍信息管理、入住管理、退宿管理、统计报表等选项,可以通过输入数字来选择相应的功能。 4. 对于每个选项,编相应的函数来实现功能,比如添加学生信息、查询学生信息、审核学生入住申请、分配宿舍等。 5. 在每个函数中,对链表进行操作,比如遍历链表、添加节点、删除节点等。 6. 在统计报表功能中,根据已有数据计算入住率、退宿率等统计数据,并输出到屏幕上。 需要注意的是,在实现过程中需要考虑数据的安全性和可靠性,比如对于敏感数据需要进行加密存储,对于用户输入的数据需要进行验证。同时需要对异常情况进行处理,比如链表为空、文件读失败等情况。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值