用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 !");elseprintf("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语言编写简单管理系统的分析。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部