存储器管理c语言实现,用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语言编写简单管理系统的分析。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值