【C语言】如何写一个C语言项目,C语言项目设计模板

前言

酒店前台找出了自己之前写过的作业,做一个项目的模板介绍。当时我的选题是:"研究生考勤系统",当时做的代码并不好,所以不要考究代码,看看一个完整的项目有哪些内容。


一,目录

首先是目录,一个上规格的目录可以让项目经理眼前一亮

1...简介... 3

1.1   作品创意/项目背景... 3

1.2   项目实施计划... 3

2.... 总体设计... 4

2.1   系统功能... 4

2.1.1       功能概述... 4

2.1.2       功能说明... 4

2.2   系统软硬件平台... 5

2.2.1       系统开发平台(含开源/第三方工具)... 5

2.2.2       系统运行平台... 6

2.3   关键技术... 6

2.4   作品特色... 7

3....详细设计... 8

3.1   系统结构设计... 8

3.1.1       技术架构... 8

3.1.2       功能模块设计... 8

3.1.3       关键功能/算法设计... 9

3.2   数据结构设计... 9

3.2.1       存储数据... 10

3.2.2       接口(模块接口、系统间接口)... 10

3.2.3       关键数据结构... 11

3.3   系统界面设计... 12

3.3.1       界面设计风格... 12

3.3.2       主要功能页面... 12

4.......系统安装及使用说明... 15

5...总结... 17

6.... 附录... 18

6.1   名词定义... 18

6.2   参考资料... 18

6.3   源代码清单... 18

二,介绍项目的创意和背景

介绍本作品的创意来源,产生背景,作品的主要功能,成果的应用目标等,介绍作品创作过程中的人员分工、设计制作进度安排等。

  1. 简介
    1. 1作品创意/项目背景

步入信息化时代,就跟电脑的普及一样,很多过去用纸来记录的文案工作都变成了用电脑进行操作,从而节约工作时间,提高工作效率。学生的考勤在过去一直是用纸张来记录的,用一份有日期区别的表格进行记录,用打勾表示到校。这样不仅很不方便,而且容易漏记,不好统计,还有不好保管的缺点。

因此,电脑系统上的考勤系统是很有必要的。

在新的电脑系统上,通过c程序,我们可以编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。

    1. 2项目实施计划

6月19日拟定相关方向后,在电脑系统上,通过c程序,编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。

6月20日整理了一份学生考勤名单,存储到了persona.txt文件里,用作C语言程序编写的数据源。

在咨询教师后,拟定以“学生名单一览”“教师端进行学生考勤”“学生的信息的删除,添加,查找”等功能进行系统开发,收集相关资料,进行程序编写。

教师考勤系统主要由教师进行查询,考勤,确认,也可以找出特定学生的信息,功能于6月20日逐渐完善。

预计于6月21日前完成所有报告的编写。

三,总体设计

对系统实现的功能、开发技术和应用环境进行介绍

  1. 总体设计
    1. 系统功能

教师登录系统后,能用本系统进行学生的考勤,并能执行学生名单一览,添加、修改、查找、删除学生信息等复杂功能。学生的缺勤或事假信息可从外部persona.txt文件导入。

      1. 功能概述

6个功能通过输入相应数字来开启

      1. 功能说明

在主界面输入用户是学生还是老师,如果是老师,输入密码,例如1101,输入所教课程。

输入1进行学生名单一览。

之后系统会回到主界面,教师可以输入0退出系统,也可以输入其它数字。

输入2开始学生考勤

教师逐个确认学生是否缺勤,缺勤学生输入1,错误系统会给出提示。所有学生确认完毕后,系统会统计缺勤学生的数目进行再一次确认。

添加,删除,修改等操作同上。

四,介绍系统开发平台

介绍系统开发所使用的软件和硬件环境,包括所用到的开源平台、第三方工具。

给出使用操作系统的名称、生产厂家、版本号等。

给出所用开源平台的官方网站、版本,该平台提供的功能。如关键算法的实现或部分实现调用了第三方工具或源代码,请标出其出处,写明已实现的功能。

如果使用了数据库,需给出使用数据库的名称、生产厂家、版本号等。如使用了多种数据库,则要说明如何实现相互之间的关联。

给出使用的硬件设备,型号、生产厂家等。

    1. 系统软硬件平台
      1. 系统开发平台(含开源/第三方工具)

使用了dev-c++,在

构建了结构体来存储学生信息数据

建立了read函数来从外部persona.txt读取学生数据

      1. 系统运行平台

Windows10,如联想的个人笔记本电脑。

    1. 关键技术

从外部读取数据文件

利用指针进行循环输出

进行学生考勤并统计缺勤人数

教师登录的密码确认。

    1. 作品特色

系统主界面如图

五.详细设计

对系统或子系统实现方法进行详细说明。

给出系统开发的功能模块结构图,并说明系统按照什么原理进行划分,系统将由哪些部分,或层次组成。

用图的形式将各个模块之间的调用关系说明清楚。如果采用面向过程的开发技术,给出主要的函数结构和调用关系图;如果采用面向对象的方法进行设计,模块调用关系图相当于包(package )图

  1. 详细设计
    1. 系统结构设计
      1. 技术架构

模块化,采用了dev-c++进行了开发,这是面向学生的较易操作的系统平台。

      1. 功能模块设计

在主函数中,将相应的功能分成6个模块,其中每个模块对应一个功能:学生名单一览,考勤,添加、修改、删除、添加学生信息。

函数

功能

int main()

主函数

Int read()

从外部读取数据

Void printlist()

展示学生名单

Int kaoqing()

进行学生考勤

Void save()

添加学生信息

Void del

删除学生信息

Void xiugai

修改学生信息

  1. 读取外部文件的函数 int read(),读取persona.txt文件,若失败,输出文件无法打开。
  2. 展示学生名单的子函数void printlist()
  1. 对教师密码进行确认的子函数。
  2. 进行学生考勤的子函数,输入数字2,系统会根据学生名单循环输出,教师进行确认

4添加学生信息的子函数,输入学生的学号,姓名,缺勤次数,系统进行保存。但要符合输入规则。

5.查找,删除,修改的基本规则同上,但多了一个查找函数,若教师输入的信息不在学生名单里,系统输出查无此人。

      1. 关键功能/算法设计

       外部数据的读写,

学生名单的循环输出,采用了指针变量

主要功能:循环输出学生名单并进行缺勤统计。

    1. 数据结构设计

结构体  struct student persona

数组 int a【】

文件 persona.txt

      1. 存储数据

1. 数据库

文件信息存储在persona.txt文件中,每次打开程序读取。

采用了结构体数据类型(数组,字符,数组)

应用了#include等函数

2. 文件存储

存储到外部persona.txt文件中每次读取用read()函数读取。

      1. 接口(模块接口、系统间接口)

   C语言程序一般数据,从外部persona.txt文件读写,在内部进行运算。

各个子函数在主函数中被调用。

      1. 关键数据结构

采用了结构体数据类型进行数据的存储,保存到外部文件persona.txt中,

在部分循环中采用了指针变量,并定义了字符串用以输入输出。

 

    1. 系统界面设计
      1. 界面设计风格

一般的c语言程序输出界面

      1. 主要功能页面

教师登录系统后,输入数字执行各个功能。功能执行完毕后又会回到主界面,直到教师输入

进入主要界面,教师有6个功能选择。输入数字1会显示学生名单。

然后系统会回到主界面,直到教师输入0退出系统。

如果教师开始考勤,在主界面输入数字2

学生名字会显示在屏幕上,教师逐一确认,缺勤输入数字1,错误系统会给出提示。

全部学生确认完毕后,系统会统计缺勤总人数:

添加学生信息按3

输入学生的学号  姓名  缺勤次数,系统会计入并给出回应,回到主界面。

删除,查找,修改同上。

最后教师在主界面输入0退出系统。

六,系统安装及使用说明

  1. 系统安装及使用说明

进入主要界面,教师有6个功能选择。输入数字1会显示学生名单。

然后系统会回到主界面,直到教师输入0退出系统。

如果教师开始考勤,在主界面输入数字2

学生名字会显示在屏幕上,教师逐一确认,缺勤输入数字1,错误系统会给出提示。

全部学生确认完毕后,系统会统计缺勤总人数:

添加学生信息按3

输入学生的学号  姓名  缺勤次数,系统会计入并给出回应,回到主界面。

删除,查找,修改同上。

最后教师在主界面输入0退出系统。

七,总结

  1. 总结

步入信息化时代,就跟电脑的普及一样,很多过去用纸来记录的文案工作都变成了用电脑进行操作,从而节约工作时间,提高工作效率。学生的考勤在过去一直是用纸张来记录的,用一份有日期区别的表格进行记录,用打勾表示到校。这样不仅很不方便,而且容易漏记,不好统计,还有不好保管的缺点。

因此,电脑系统上的考勤系统是很有必要的。

在新的电脑系统上,通过c程序,我们可以编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。在读写外部文件上,查找了教科书,通过子函数的方式,实现了外部文件的读写,这也是一大突破。利用c语言编写的电脑考勤系统,有多种功能可供用户选择,用户可根据自己的需要进行操作,系统有以下功能:

1.列出全体学生名单。

2.进行考勤,统计未到的学生人数。  

3增加学生信息

4.删除学生信息

5.修改学生信息

6.查找学生信息

通过电脑系统进行考勤,可以极大简化工作流程。方便各位教学人员的工作。面向广大教师群体,程序尽量编写得简单易懂。

八,附录

  1. 附录
    1. 名词定义

名词/缩写

说明

    1. 参考资料

[1] 《程序设计方法与技术—c语言》

    1. 源代码清单

#include <stdio.h>

#include <stdlib.h>

//总共有6个功能:学生名单展示;考勤;添加、删除、修改、查找学生信息。

//定义结构体数组

struct student

{  int num;

   char name[20];

   int times;};

//读取数据的子函数

int read(struct student persona[])

{  FILE*fp;

   int n=0;

   if((fp=fopen("persona.txt","r"))==NULL)

   {  printf("文件无法打开\n");

      exit(0);

    }

    while(!feof(fp))

    { fscanf(fp,"%d%s%d",&persona[n].num,&persona[n].name,&persona[n].times);

      n++;}

      fclose(fp);

      return n;

  }

//1.学生名单一览的子函数

void printlist(struct student persona[],int n)

{   int i;

    struct student *p;

     printf("学号   姓名    缺勤次数\n");

     for(p=persona;p<persona+n;p++)

     printf("%d   %s     %d\n",p->num,p->name,p->times);

        }    

//2考勤的子函数

int kaoqing(struct student persona[],int n)

{   struct student

{  int num;

   char name[20];

   };

   struct student persona5[n];

   int i=0,flag,j=0,k=0;

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

    {   printf(" \n%d  %s ",persona[i].num,persona[i].name);

       puts("\n是否缺勤?\n缺勤输入数字1,到校输入数字2\n");

       scanf("%d",&flag);

       if(flag==1)

       {persona5[j].num=persona[i].num;

       strcpy(persona5[j].name,persona[i].name);

       j++;

       printf("---------------");

       printf("\n  %s缺勤已记录。\n\n",persona[i].name);

       printf("--------------\n\n");

       }

       else if(flag!=2)

       {printf("输入错误\n");

       i--;}

       else 

       {printf("---------------");

       printf("\n  %s到校已记录。\n\n",persona[i].name);

       printf("--------------\n\n");}}

     if(j>0)

     {printf("以下为缺勤学生\n");

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

      printf("%d  %s  \n",persona5[k].num,persona5[k].name);

  }   

  system("pause");

         }

       

 //3添加学生信息的子函数      

void save()

{

   

    struct student

{  int num;

   char name[20];

   int times;};

   struct student persona5[1];

   int i=0;

    printf("输入要添加的学生的学号(数字)+空格+姓名(字符)+空格+缺勤次数(数字)\n" );

    scanf("%d %s %d",&persona5[i].num,persona5[i].name,&persona5[i].times);

    printf("输入完毕\n") ;

    printf("学号  姓名 缺勤次数\n");

    printf("%d  %s   %d\n已记录\n\n",persona5[i].num,persona5[i].name,persona5[i].times);

 }

  

//4.删除学生信息的子函数

void del(struct student persona[],int n)

 {  

   int i=0,flag=0,j=0;

   int num;

   char name;

    printf("输入要删除的学生的学号(数字)+空格+姓名(字符)\n" );

    scanf("%d %c ",&num,&name);

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

    {

    if(persona[i].num==num)

    {flag=1;j=i;break;}

    else

    flag=0;

   

    }

   

    if(flag==1)

    {printf("学号  姓名  缺勤次数\n\n");

    printf("%d  %s   %d\n已删除\n\n\n",persona[j].num,persona[j].name,persona[j].times);}

   

    else

    printf("未找到此学生\n") ;

    printlist(persona,n);

    system("pause");

 }

//5修改学生信息的子函数

void xiugai(struct student persona[],int n)

 {  

   int i=0,flag=0,j=0,times;

   int num;

   char name;

    printf("输入要修改的学生的学号(数字)+空格+姓名(字符)\n" );

    scanf("%d %c ",&num,&name);

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

    {

    if(persona[i].num==num)

    {flag=1;j=i;break;}

   

    }

   

    if(flag==1)

    {printf("输入修改后的缺勤次数\n\n");

    scanf("%d",&times);

    printf("学号  姓名  缺勤次数 \n");

    printf("%d  %s  %d\n已修改\n\n\n",persona[j].num,persona[j].name,times);}

    else

    printf("查无此人\n") ;

    printlist(persona,n);

    system("pause");

 }

//6.查找学生信息的子函数

void chazao(struct student persona[],int n)

 {  

   int i=0,flag=0,j=0,times;

   int num;

   char name;

    printf("输入要查找的学生的学号(数字)+空格+姓名(字符)\n" );

    scanf("%d %c ",&num,&name);

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

    {

    if(persona[i].num==num)

    {flag=1;j=i;break;}

    else

    flag=0;

    }

  

   

    if(flag==1)

    {

    printf("学号  姓名  缺勤次数 \n");

    printf("%d  %s  %d\n已找到\n\n\n",persona[j].num,persona[j].name,persona[j].times);}

    else

    printf("未找到此学生\n学生名单如下\n") ;

    printlist(persona,n);

   

 }

//主函数

int main()

{ int i;

   struct student persona[12];

   int n,choice=1;

   n=read(persona);

   printf("学生名单如下:\n");

   printlist(persona,n);

   while(choice!=0)

      {  

          printf("\n\n\n\n\n             教师考勤系统\n");

   printf("--------------------------------------\n");

   printf("                1.学生名单一览\n");

   printf("                2.开始考勤\n");

   printf("                3.添加学生信息\n");

   printf("                4.删除学生信息\n");

   printf("                5.修改学生信息\n");

   printf("                6.查找学生信息\n");

   printf("                0.退出系统\n");

   printf("-----------------------------------------\n");

   printf("请输入您的选择【0-5】\n");

  

   scanf("%d",&i);

  

   switch(i)

    {    case 1:printf("\n学生信息如下\n");printlist(persona,n);break;

         case 2:printf("\n按学号顺序开始考勤\n");kaoqing(persona,n);break;

         case 3:printf("\n添加学生信息 \n");save();break;

         case 4:printf("\n删除学生信息 \n ");del(persona,n);break;

         case 5:printf("\n修改学生信息 \n ");xiugai(persona,n);break;

         case 6:printf("\n查找学生信息 \n ");chazao(persona,n);break;

         case 0:break;

         default:printf("输入序号有误\n");break;     

         }

      printf("按0退出教师考勤系统,其他键继续使用\n");

       scanf("%d",&choice)

         }

        

         system("pause");

         return 0;}

九,说在后面的话

以上的模板对于完成一个项目设计是很完整了。选题是“研究生考勤系统”,当时是一串烂代码,硬着头皮凑字数,笑。希望对大家的实际项目设计有所帮助。


我的其他专栏:

C语言

单片机原理

模式识别原理

数字电子技术实验

自动控制原理

模拟电子技术

数据结构

 

关注我了解更多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值