c语言实训报告

时间:2024.5.2

C语言程序设计

实训报告

题    目:   人力资源管理系统

院    系:   信息科技学院

专    业:   计算机科学与技术

姓    名:   黄富云     

学    号:   1151210119

指导教师:   王小琼    

日    期:   20##年9月15日

桂林电子科技大学信息科技学院

前 言

课程设计环节是应用型本科院校非常重要的一个教学环节,是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。通过课程设计,不仅能够使学生得到系统的技能训练,巩固和加强所学得专业理论知识,而且能够培养学生工程意识、创新能力、团队精神等综合素质,培养学生的设计能力和解决实际问题的能力。

C语言由于其强大的功能,丰富的表达能力,高效的代码,良好的移植性和灵活性,自1972年问世以来,经久不衰,即使现在出现了面向对象的程序设计方法和开发工具,但它仍然是人们学习程序设计的首选语言,用它训练和提高编程技术,以及开发应用程序等。

我们通过《C语言程序设计》这门课程的学习,已经能编写解决小问题的程序,对程序的开发也有了初步的认识,还掌握了C 语言的基本语法,这一过程确确实实令我们感到欣喜,有点计算机可以完成自我任务的成就感。但是,对于程序设计而言,学习C 的步伐不应该停留于此。我们最终的目的应该是掌握开发大型综合程序的方法,即遵循软件工程的开发步骤和结构化程序设计思想,用C 语言开发出解决复杂问题的大型综合程序。可是对于多数学生来说,学习了C语言后,除了应付各种考试之外,别无它用,对Turbo C语言丰富的函数知之甚少,加上DOS环境所限,因而对C语言兴趣不大,也感到C语言比较难以掌握。

本实训就是为了让学生在学完C语言后进一步了解C语言的知识,掌握C语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习C语言的兴趣,更为今后学习其它专业知识及开发程序打下坚实的基础。

本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者表示衷心的感谢。

由于时间、经验及水平的原因,不当、不足之处,请大家提出宝贵意见。

编者

我所选的题目让我更为了解了实用程序的开发过程,运用了之前所学C语言的文件和数组的各种基本操作。通过本程序的制作,使我能对C语言的文件操作有一个更深刻的了解,通过课程之外的知识和课内知识的结合实现了对通信录信息的管理,为今后C语言的学习和开发打下了基础。同时我所编写的程序中涉及结构体、数组、文件等方面的知识。

1、  问题分析

我需要制作一个可以存储信息和管理信息的程序。那么在系统中这些信息就包括了,名字、编号、性别、年龄、入职时间、所属部门、住址这几个信息。那么我制作了一个界面,通过选择对应功能来满足需求。

void menu()/* 界面*/

{

       int choice;

       printf("\n\n                               人力资源管理系统               \n\n");

       printf("                 name:黄富云 classes:软件一班 number:1151210119     \n");

       printf("                 ********************主菜单功能****************     \n");

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

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

       printf("                 ***            1.查询员工信息              ***     \n");

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

       printf("                 ***            3.增加员工信息              ***     \n");

       printf("                 ***            4.按编号删除信息            ***     \n");

       printf("                 ***            5.显示当前信息              ***     \n");

       printf("                 ***            6.保存当前信息              ***     \n");

       printf("                 ***            7.退出 0.刷新               ***     \n");

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

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

       printf("\n");

       printf("                   **查询前请'0'刷新系统,增加信息后请保存**        \n");

       printf("\n");

       printf("请选择菜单编号:\n");

       scanf("%d",&choice);

       switch(choice)

       {

    case 0:readfile();break;

       case 1:search();break;

       case 2:change();save;break;

       case 3:add();save;break;

       case 4:del();save;break;

       case 5:display();break;

       case 6:save();break;

       case 7:k=0;break;;

       default:printf("请在0-7之间选择\n");

       }

}

效果图如下:

那么接下来,我定义了我的结构。

2.总体程序分析

 

我以类似于树状图的结构来构建我的程序,顶端为主函数,其次使它调用界面,在通过界面的选择来开启个个模块的小程序。

图如下

                               系统设计构想图

二,数据结构设计

#include<stdio.h>  /*I/O函数*/

#include<stdlib.h> /*其它说明*/

#include<string.h> /*字符串函数*/

#define BUFLEN 100 /* 缓冲区最大字符数*/

#define LEN 15 /* 编号和姓名最大字符数,实际请更改*/

#define N 100 /* 最大员工人数,实际请更改*/

struct record /*结构体*/

{

       char num[LEN+1]; /* 编号*/

       char name[LEN+1]; /* 姓名*/

       int age; /* 年龄*/

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

       char tell[LEN+1]; /* 电话*/

       char worktime[LEN+1]; /* 入职时间*/

       char section[LEN+1]; /* 所属单位*/

       char address[LEN+1]; /* 住址*/

}stu[N];

  其中struct record 意为存储员工信息,我将它作为数组的数据域。

三,设定的函数

函数功能描述

1. readfile()

函数原型:void readfile();该函数用于读取文件,录入信息。

2. seek();

函数原型:void chazhao();该函数用于查找员工信息。

4. modify()

函数原型:void xiugai(),该函数用来修改员工信息。

5.sort()

函数原型:void sort(),该函数用于将信息按员工编号顺序排序。

6.insert()

函数原型:void buchong(),该函数用来添加员工信息。

7. del()

函数原型:void del(),该函数用于删除员工信息。

8. display()

函数原型:void display(),该函数用于显示目前已录入的员工信息。

9. save()

函数原型:void save(),该函数用来储存输入的员工信息,将其保存在数据文件rlzy.txt中。

10. menu()

函数原型:void menu(),该函数用来显示系统主界面。

11.main()整个信息管理系统控制部分。

系统实现

“加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。”

#include<stdio.h>  /*I/O函数*/

#include<stdlib.h> /*其它说明*/

#include<string.h> /*字符串函数*/

#define BUFLEN 100 /* 缓冲区最大字符数*/

#define LEN 15 /* 编号和姓名最大字符数,实际请更改*/

#define N 100 /* 最大员工人数,实际请更改*/

 “定义与联系人有关的信息”

struct record /*结构体*/

{

       char num[LEN+1]; /* 编号*/

       char name[LEN+1]; /* 姓名*/

       int age; /* 年龄*/

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

       char tell[LEN+1]; /* 电话*/

       char worktime[LEN+1]; /* 入职时间*/

       char section[LEN+1]; /* 所属单位*/

       char address[LEN+1]; /* 住址*/

}stu[N];

定义函数说明和全局变量

int k=1,n,m; /* 定义全局变量*/

void readfile();/* 函数声明*/

void search ();

void change();

void add();

void del();

void display();

void save();

void menu();

主函数

main()函数主要对整个程序控制,以及相关功能模块的使用。

int main()

{  while(k)

       menu();

       readfile();

       return 0;

}

主菜单界面

void menu()/* 界面*/

{

       int choice;

       printf("\n\n                               人力资源管理系统               \n\n");

       printf("                 name:黄富云 classes:软件一班 number:1151210119     \n");

       printf("                 ********************主菜单功能****************     \n");

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

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

       printf("                 ***            1.查询员工信息              ***     \n");

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

       printf("                 ***            3.增加员工信息              ***     \n");

       printf("                 ***            4.按编号删除信息            ***     \n");

       printf("                 ***            5.显示当前信息              ***     \n");

       printf("                 ***            6.保存当前信息              ***     \n");

       printf("                 ***            7.退出 0.刷新               ***     \n");

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

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

       printf("\n");

       printf("                   **查询前请'0'刷新系统,增加信息后请保存**        \n");

       printf("\n");

       printf("请选择菜单编号:\n");

       scanf("%d",&choice);

       switch(choice)

       {

    case 0:readfile();break;

       case 1:search();break;

       case 2:change();save;break;

       case 3:add();save;break;

       case 4:del();save;break;

       case 5:display();break;

       case 6:save();break;

       case 7:k=0;break;;

       default:printf("请在0-7之间选择\n");

       }

}

显示联系人信息

void display()

{

       int i;

       system("cls");

       printf("当前显示信息为:\n");

       printf("编号 姓名  年龄  性别      电话           入职时间      所属部门     地址\n");

       for(i=0;i<n;i++)

       {

              printf("%2s %4s %d    %2s    %9s        %5s      %5s %8s\n",stu[i].num,stu[i].name,

                                          stu[i].age,stu[i].sex,stu[i].tell,

                                          stu[i].worktime,stu[i].section,stu[i].address);

       }

}

通过联系人编号与姓名来实现查找

void search()/*查找*/

{

       int item,flag;

       char s1[21]; /* 以姓名和编号最长长度+1为准*

       printf("\n");

       printf("    1.按编号查询    \n");

       printf("    2.按姓名查询    \n");

       printf("    3.退出本菜单    \n");

    printf("\n");

       while(1)

       {

              printf("请选择子菜单编号:");

              scanf("%d",&item);

              flag=0;

              switch(item)

              {

              case 1:

                     printf("请输入员工的编号:");

                     scanf("%s",s1);

                     for(i=0;i<n;i++)

                            if(strcmp(stu[i].num,s1)==0)

                            {

                                   flag=1;

                                   printf("编号 姓名  年龄  性别      电话           入职时间      所属部门     地址\n");

                                   printf("\n");

                                   printf("%2s %4s %d    %2s    %9s        %5s      %5s %8s\n",stu[i].num,stu[i].name,

                                          stu[i].age,stu[i].sex,stu[i].tell,

                                          stu[i].worktime,stu[i].section,stu[i].address);

                            }

                            if(flag==0)

                                   printf("该编号不存在!");break;

              case 2:

                     printf("请输入员工的姓名:\n");

                     scanf("%s",s1);

            for(i=0;i<n;i++)

                            if(strcmp(stu[i].name,s1)==0)

                            {

                                   flag=1;

                    printf("编号 姓名  年龄  性别      电话           入职时间      所属部门     地址\n");

                                   printf("\n");

                                   printf("%2s %4s %d    %2s    %9s        %5s      %5s %8s\n",

                                          stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tell,

                                          stu[i].worktime,stu[i].section,stu[i].address);

                            }

                            if(flag==0)

                                   printf("该姓名不存在!\n");break;

              case 3:return;

        default:printf("请在1-3之间选择\n");

              }

       }

}

修改联系人信息

void change()/*修改信息*

{

    int i,item,num;

       char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和编号最长长度+1为准*

       printf("请输入要修改员工编号:\n");

       scanf("%s",s1);

       for(i=0;i<n;i++)

              if(strcmp(stu[i].num,s1)==0) /*比较字符串是否相等*/

                     num=i;

              printf("\n");

              printf("1.修改姓名\n");

              printf("2.修改年龄\n");

              printf("3.修改性别\n");

              printf("4.修改电话\n");

              printf("5.修改入职时间\n");

              printf("6.修改所属部门\n");

              printf("7.修改地址\n");

              printf("8.退出本菜单\n");

              printf("\n");

              while(1)

              {

                     printf("请选择子菜单编号:");

                     scanf("%d",&item);

                     switch(item)

                     {

                     case 1:

                            printf("请输入新的姓名:\n");

                            scanf("%s",s2);

                            strcpy(stu[num].name,s2); break;

                     case 2:

                            printf("请输入新的年龄:\n");

                            scanf("%d",&stu[num].age);break;

                     case 3:

                            printf("请输入新的性别:\n");

                            scanf("%s",sex1);

                            strcpy(stu[num].sex,sex1); break;

                     case 4:

                            printf("请输入新的电话:\n");

                            scanf("%s",s2);

                            strcpy(stu[num].tell,s2); break;

                     case 5:

                            printf("请输入新的入职时间:\n");

                            scanf("%s",s2);

                            strcpy(stu[num].worktime,s2); break;

                     case 6:

                            printf("请输入新的所属部门:\n");

                            scanf("%s",s2);

                            strcpy(stu[num].section,s2); break;

                     case 7:

                            printf("请输入新的地址:\n");

                            scanf("%s",s2);

                            strcpy(stu[num].address,s2); break;

                     case 8:return;

                     default:printf("请在1-8之间选择\n");

                     }

              }

}

添加联系人信息

void add()/*加入函数*/

{void sort();

       int i=n,j,flag;

       printf("请输入待增加的员工人数:\n");

       scanf("%d",&m);

       do

       {

              flag=1;

              while(flag)

              {

                     flag=0;

                     printf("请输入第%d 个员工编号:\n",i+1);

                     scanf("%s",stu[i].num);

                     for(j=0;j<i;j++)

                            if(strcmp(stu[i].num,stu[j].num)==0)

                            {

                                   printf("已有该编号,请检查后重新登入!\n");

                                   flag=1;

                                   break; /*如果重复编号,则可以重新输入 方便快捷*/

                            }

              }

              printf("请输入第%d 个员工的姓名:\n",i+1);

              scanf("%s",stu[i].name);

              printf("请输入第%d 个员工的年龄:\n",i+1);

              scanf("%d",&stu[i].age);

              printf("请输入第%d 个员工的性别:\n",i+1);

              scanf("%s",stu[i].sex);

              printf("请输入第%d 个员工的电话:\n",i+1);

              scanf("%s",stu[i].tell);

              printf("请输入第%d 个员工的入职时间:\n",i+1);

              scanf("%s",stu[i].worktime);

              printf("请输入第%d 个员工的所属部门:\n",i+1);

              scanf("%s",stu[i].section);

              printf("请输入第%d 个员工的地址:\n",i+1);

              scanf("%s",stu[i].address);

              if(flag==0)

              {

                     i=i;

                     i++;

              }

       }

       while(i<n+m);

       n+=m;

       printf("录入完毕!\n\n");

       sort();

}

删除联系人信息

void del()/*删除函数*/

{

       int i,j,flag=0;

       char s1[LEN+1];

       system ("cls");

       printf("请输入要删除的员工编号:\n");

       scanf("%s",s1);

       for(i=0;i<n;i++)

              if(strcmp(stu[i].num,s1)==0)

              {

                     flag=1;

                     for(j=i;j<n-1;j++)

                            stu[j]=stu[j+1];

              }

              if(flag==0)

                     printf("该编号不存在!\n");

              if(flag==1)

              {

                     printf("删除成功,显示结果请选择菜单\n");

                     n--;

              }

}

按编号进行对联系人的排序

void sort()/*按编号排序*/

{

        int i,j,*p,*q,s;

        char temp[10];

        for(i=0;i<n-1;i++)

        {

               for(j=n-1;j>i;j--)

                      if(strcmp(stu[j-1].num,stu[j].num)>0)

                      {

                             strcpy(temp,stu[j-1].num);

                             strcpy(stu[j-1].num,stu[j].num);

                             strcpy(stu[j].num,temp);

                             strcpy(temp,stu[j-1].name);

                             strcpy(stu[j-1].name,stu[j].name);

                             strcpy(stu[j].name,temp);

                             strcpy(temp,stu[j-1].sex);

                             strcpy(stu[j-1].sex,stu[j].sex);

                             strcpy(stu[j].sex,temp);

                             strcpy(temp,stu[j-1].tell);

                             strcpy(stu[j-1].tell,stu[j].tell);

                             strcpy(stu[j].tell,temp);

                             strcpy(temp,stu[j-1].worktime);

                             strcpy(stu[j-1].worktime,stu[j].worktime);

                             strcpy(stu[j].worktime,temp);

                             strcpy(temp,stu[j-1].section);

                             strcpy(stu[j-1].section,stu[j].section);

                             strcpy(stu[j].section,temp);

                             strcpy(temp,stu[j-1].address);

                             strcpy(stu[j-1].address,stu[j].address);

                             strcpy(stu[j].address,temp);

                             p=&stu[j-1].age;

                             q=&stu[j].age;

                             s=*q;

                             *q=*p;

                             *p=s;

                      }

        }

 }

保存信息

void save()                                                                                       

{   int i;    FILE *fp;

    fp=fopen("e:\\rlzy.txt","w");

    for(i=0;i<n;i++)

    {   fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tell,

                                          stu[i].worktime,stu[i].section,stu[i].address);

    } 

    fclose(fp);

程序效果与调试

功能一添加信息

我选择3 添加,然后输入待添加人数 2此为第一人

当第二人编号重复时,会有提示,这是可以继续输入,方便快捷,是我这个程序得意之处之一。然后显示录入完毕,返回界面。

功能一删除信息

功能一查找信息

功能一显示所有信息

功能一修改

功能一保存

系统维护

通过测试与调试确认程序无错时,我觉得可以松一口气,把软件交付供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。毕竟水平有限…

来个总结吧…

总结

开发经验

通过对本题目的开发,体会到要掌握以下几点内容。

l  设计风格,按树状分布“自顶向下,逐步细化,模块化”的方法进行设计。

l  不能随意修改代码而不备份,一定要做好备份工作!

l  定义函数时,应选好参数的个数和数据类型。

l  文件使用方法。文件使用完毕后应及时关闭。

遇到的问题

在前期编写方面还算较为顺利,但在后期的调试过程中,我无意修改了某个程序段而导致了“年龄”显示的乱码仔细查找,找同学帮忙都没有结果。这个问题后来我通过重新编写仔细核对把它解决了,但是自己也不知道问题出在哪里。

感想和心得体会

这次实训让我明白了书到用时方恨少,很多想做的功能和构想都由于自己的水平有限而不能实现。发现自己的知识竟是如此贫乏,顿时感到了压力的存在,从而也激发了我的学习热情。它会成为我今后不断进取、永不懈怠的动力。

那么在今后的学习中,我也明白了如何去提高自己的C语言水平。首先,基本知识一定要掌握好。再者,要多和别人交流,这样才能进步得更快。最重要的一点,就是一定要勤快,多尝试少问为什么,很多程序段对于我们来说是十分陌生的,与其一味的去了解它的概念,不如多研究一下它的实例。每次学习到新的东西后,要及时跟进相应知识,不然学不好C语言。我一遍又一遍的看着我的成果,觉得这仅仅是一个开始,实训的结束并不是学习的终结,而是让我将我领入了C语言编程的大门。

参考文献

[1]韩旭      C语言从入门到精通      清华大学出版社           2010

[2] 谭浩强.   C程序设计(第三版).      清华大学出版社,     2005 

[3]孙志刚     C语言大学实用教程学习指导   电子工业出版社       2008

等等一些网络上的资料

更多相关推荐:
C语言实验报告范文

计算机科学与技术系C语言实验报告实验名称:指针及其应用日期:得分:指导老师:专业:班次:姓名:学号:实验目的(1)掌握变量的指针及其基本用法。(2)掌握一维数组的指针及其基本用法。(3)掌握指针变量作为函数的参…

C语言实训报告

C语言程序设计与数据结构实训报告课题名称通讯录管理系统专业软件技术开发方向班级软件G083学号姓名徐阳指导教师黄爽20xx年12月25日目录1课程设计目的12课程设计题目13课程设计报告内容14结论105结束语...

C语言实验报告标准格式

暨南大学本科实验报告专用纸课程名称高级语言程序设计成绩评定实验项目名称结构体和共用体指导教师张晓刚实验项目编号8060151108实验项目类型综合性实验地点C301学生姓名苟长弘学号20xx051282学院信息...

C语言实验报告书写格式及模板

大学学院实验报告专业名称实验室实验课程C实验名称姓名学号同组人员实验日期语言程序设计程序设计12345678

c语言实验报告模板完成版

高级语言程序设计学生实验报告专业计算机科学与技术学号姓名1实验一C程序的运行环境和使用方法1实验目的1了解所用的计算机系统的基本操作方法学会独立使用该系统2了解在该系统上如何编辑编译连接和运行一个C程序3通过运...

C语言实验报告范本

实验报告课程名称C语言程序设计实验项目顺序结构程序设计实验仪器计算机系别信息与通信工程学院专业通信班级学号通信120420xx010934学生姓名王浩鑫实验日期20xx年4月13日成绩指导教师一实验目的1234...

c语言实验报告范本

说明下面的模板中黑体字标明的部分是我加的注释大家要按注释来写报告实验项目名称符号函数的实现此条要求写清楚一实验目的熟练掌握ififelseifelseif语句格式及使用方法掌握if语句中的嵌套关系和匹配原则利用...

C语言实验报告模板

C语言程序设计上机实验报告指导教师学号姓名班级时间第次实验实验时间年月日实验室实验题目实验目的实验要求实验主要步骤实验结果心得体会

C语言实验报告-函数

华北水院高级语言程序设计C语言实验报告五20xx20xx学年第二学期20xx级专业学号姓名一实验题目函数二实验目的略三实验内容1程序验证略2程序设计1编程实现求两个正整数的最大公约数要求计算最大公约数用函数fu...

C语言实验报告函数

高级语言程序设计实验报告实验序号6实验项目名称函数2includeltstdiohgtincludeltmathhgtdefinee1e5doublefunadoublenfloati1doublex10s0w...

C语言实验报告

通知各位老师本学期非计算机专业C语言程序设计基础课实验报告要求1统一用武汉科技大学实验报告本写和上学期05级用过的一样2本学期交三次实验报告循环结构程序设计函数指针要求学生在完成以下实验报告参考C语言程序设计课...

C语言实验报告模板

C语言程序设计20xx20xx1实验报告专业班级冶金122姓名课程教师实验时间20xx年11月4日星期二实验一一实验目的1熟悉C程序编辑环境掌握主要菜单项的操作和作用2熟悉编写一个C程序的上机过程编辑编译链接和...

c语言实训报告(40篇)