C语言课程实训报告(实训1-1)

汕头职业技术学院

C语言课程实训报告

 

第二篇:C语言实训报告 RTF 文档1

编号:

C语言实训报告RTF文档1

C语言程序设计报告

题 目:

院 (系):

专 业:学生姓名:

学 号:

指导教师:

学生信息管理系统 桂电职院计算机系 张俊伟 1012310415、1012310432 钟永权

20xx年4月5日

实现的任务

完成对学生信息管理系统设计即能对若干人的信息进行各种管理。

设计内容如下:

1.确定能记录学生信息的数据结构:学号、姓名、性别等信息,它是本程序的核心数据结构,定义为如下的结构体类型:

int shoudSave=0; /*全局变量,用于记录数组的当前位置*/

struct student /*定义结构体类型,代表学生信息*/

{

char Number[10]; /*学号*/

char Name[20]; /*姓名*/

char Age[3]; /*年龄*/

char Sex[4]; /*性别*/

2.程序具有以下基本功能:

? 输入学生的资料:输入个人的资料,并且可选择继续输入或退出到主菜单,若输入的学号信息已经存在会提示已经存在是否进行修改。

? 从文件调入资料:对所要的资料进行调配。

? 查询学生的资料:可按姓名查找某人记录,也可按学号查找某人记录。若找到,则显示所有人的记录,否则提示未找到,无论查找成功否,都可以退到主菜单。

? 删除学生的资料:删除已输入的记录。输入姓名或者学号查找要删除的记录,若找到,提示是否确定删除,若选择是,则删除该人信息,若选择否,则取消;若没找到,提示无此人信息。

? 追加学生的资料:此项可以追加到学生的详细信息。

? 显示学生的成绩:此项可以输入出刚才输入的所有数据。

? 统计学生的成绩:可以统计出个人总分和平均分、单科平均分、总分最高分、总分最低分等。

? 保存输入的资料:要想刚输入的数据永久保存在文件中要选此项。 ? 对成绩进行排序:此项对学生的各科成绩可以进行排序等。

设计要求如下:

1.核心数据结构用到的结构体要采用动态内存分配和链表结构。地址也要

求存储在动态分配的内存中,以节约内存。内存的起始地址存储在结构体的成员

指针student中。

2.使用文件进行存储和管理。程序启动时可从文件中读取通信信息,或从

键盘输入通信信息;运行过程中如添加或删除记录时也可对文件进行存取;退出

前可选择将通信信息保存到文件中。

3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口

要注释清楚。对程序其它部分也进行必要的注释。

4.对系统进行功能模块分析、画出总流程图和各模块流程图。

5.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可

以反复使用,最好使用菜单。

6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。

7.所有程序需调试通过。

老师评语:

目录

课题的目的意义………………………………………………6 功能介能………………………………………………………6 模块和流程图………………………………………………….6 用户使用说明书……………………………………………….8 总结…………………………………………………………….8 人员安排………………………………………………………8 参考文献………………………………………………………8 程序代码……………………………………………………8-21

课程设计的目的

课程设计围绕课程的整体教学目标进行,课程设计的题目具有一定的综合性和应性,只靠个别单元的知识一般不能实现课程设计的目标,需要对课程知识进行综合运用。要完成好课程设计,就要对课程知识进行系统学习、复习、总结、应用,达到在实践中学习知识、掌握知识、应用知识和培养能力的目的。

1、通过课程设计,进一步熟悉掌握以下知识:数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等。 达到系统理解、综合运用课程知识的学习目标。

2、通过课程设计,培养学生结构化程序、模块化程序设计的方法和能力。

3、通过课程设计,提高分析问题、解决问题、以及综合利用C语言程序解决实际问题的方法。

4、通过课程设计,掌握程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试、调试方法解。

5、了解软件的编制过程。

功能介绍

这是一款简单的以C语言为基础的信息管理系统。这款软件的功能包括输入记录、显示所有记录、插入记录、删除一份记录、输入学号或者姓名查询、将记录写入文件和导入记录,同时具有开始登录模块加密。

模块和流程图

此软件包括8个模块,分别是输入模块、显示记录模块、查询模块、排序模块、 插入记录模块、删除记录模块、文件写入模块、导入模块以及主函数。

流程图

C语言实训报告RTF文档1

输入函数: 输出函数:

用户使用说明

此程序为一个简单的信息管理系统,有记录、显示所有记录、添加删除记录以及查找记录的功能。在主菜单中,请选择您所需要的操作:

①.输入学生的资料 ②.从文件调入资料

③.查询学生的成绩 ④.删除学生的资料

⑤.追加学生的资料 ⑥.显示学生的成绩

⑦.统计学生的成绩 ⑧.保存输入的资料

⑨.对成绩进行排序

? 输入学生的资料:输入个人的资料,并且可选择继续输入或退出到主菜

单,若输入的学号信息已经存在会提示已经存在是否进行修改。

? 从文件调入资料:对所要的资料进行调配。

? 查询学生的资料:可按姓名查找某人记录,也可按学号查找某人记录。

若找到,则显示所有人的记录,否则提示未找到,无论查找成功否,都可以退到主菜单。

? 删除学生的资料:删除已输入的记录。输入姓名或者学号查找要删除的

记录,若找到,提示是否确定删除,若选择是,则删除该人信息,若选?

?

?

?

?

择否,则取消;若没找到,提示无此人信息。 追加学生的资料:此项可以追加到学生的详细信息。 显示学生的成绩:此项可以输入出刚才输入的所有数据。 统计学生的成绩:可以统计出个人总分和平均分、单科平均分、总分最高分、总分最低分等。 保存输入的资料:要想刚输入的数据永久保存在文件中要选此项。 对成绩进行排序:此项对学生的各科成绩可以进行排序等。

总结:

本次设计十分成功,但是仍然存在不足之处,由于对链表不是十分熟悉,没有能充分使用链表保存数据,内存使用不够高效,由于自己实力不足,一些功能无法实现,使设计出的软件,功能不够完善。本次设计综合运用了,我们这个学期所学的所有知识,这是一次十分有益的实践活动,是对我们是否掌握了课本知识的综合检测,也是对我们实践能力的一次检验。对设计出的软件,因使用结构链表使内存得到更高效的利用,并节约内存的使用,提高程序运行效率。

人员安排:

黄莉做前提提议设想,组织架构,负责程序的编译,黄正青负责优化和修改。

参考文献

C语言程序设计及互联网。

附:核心代码

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define SC printf /*定义符号常量,代表输出函数*/

int shoudSave=0; /*全局变量,用于记录数组的当前位置*/

struct student /*定义结构体类型,代表学生信息*/

{

char Number[10]; /*学号*/

char Name[20]; /*姓名*/

char Age[3]; /*年龄*/

char Sex[4]; /*性别*/

};

typedef struct node

{

struct student data;

struct node *next;

}Node,*Link;

void menu() /* 本函数用于输出主菜单信息 */

{

SC("\n○●○●○●○●○●○●○●○◇学生信息管理系统◇●○●○●○●○●○●○●○●\n");

SC("\t\t ①.输入学生的资料\t\t ②.从文件调入资料\n");

SC("\t\t ③.查询学生的成绩\t\t ④.删除学生的资料\n");

SC("\t\t ⑤.追加学生的资料\t\t ⑥.显示学生的成绩\n");

SC("\t\t ⑦.统计学生的成绩\t\t ⑧.保存输入的资料\n");

SC("\t\t ⑨.对成绩进行排序\t\t ◎.退出系统\n");

SC("\n○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●\n");

}

void printstart() /* 本函数用于输出多次用到的符号 */

{ SC("﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌"); }

void Wrong() /* 本函数用于输出错误信息 */

{ SC("\n=====>温馨提示:您输入错误!\n"); }

void Nofind() /* 本函数用于输出未找到信息 */

{ SC("\n=====>温馨提示:没有找到您要找的学生!\n"); }

void printe(Node *p) /* 本函数用于输出学生信息 */

{

SC("※学号:%s\t※姓名:%s\n※性别:%s\n",p->data.Number,p->data.Name, p->data.Age,p->data.Sex,);

}

Node* Locate(Link l,char findmess[],char NameorNumber[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */

{ Node *r; if(strcmp(NameorNumber,"Number")==0) /* 按学号查询 */ { r=l->next; while(r!=NULL)

{ if(strcmp(r->data.Number,findmess)==0) return r; r=r->next; } }

else if(strcmp(NameorNumber,"Name")==0) /* 按姓名查询 */

{ r=l->next; while(r!=NULL)

{ if(strcmp(r->data.Name,findmess)==0)

return r;

r=r->next;

}

}

return 0;

}

void Add(Link l) /* 本函数用于增加学生信息 */

{ Node *p,*r,*s;

char Number[10];

r=l;

s=l->next;

while(r->next!=NULL)

r=r->next; /* 将指针置于最末尾 */

while(1)

{

SC("\n=====>请您输入学号[按'0'返回上一级菜单]:");

scanf("%s",Number);

if(strcmp(Number,"0")==0)

break;

while(s)

{

if(strcmp(s->data.Number,Number)==0)

{

SC("=====>温馨提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",Number);

printstart();

printe(s);

printstart();

SC("\n");

return;

}

s=s->next;

}

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.Number,Number);

SC("=====>请您输入姓名:"); scanf("%s",p->data.Name); getchar(); SC("=====>请您输入性别:"); scanf("%s",p->data.Sex); getchar(); /* 信息输入已经完成 */

p->next=NULL;

r->next=p;

r=p;

shoudSave=1;

}

}

void Qur(Link l) /* 本函数用于查询学生信息 */

{

int sel;

char findmess[20];

Node *p;

if(!l->next)

{

SC("\n=====>温馨提示:没有资料可以查询!\n"); return;

}

SC("\n=====>1.按学号查找\n=====>2.按姓名查找\n"); SC("温馨提示:请输入1或2选择查找方式:");

scanf("%d",&sel);

if(sel==1)/* 按学号查询 */

{

SC("=====>请您输入要查找的学号:");

scanf("%s",findmess);

p=Locate(l,findmess,"Number");

if(p)

{

SC("\t\t\t\t查找结果\n");

printstart();

printe(p);

printstart();

}

else

Nofind(); }

else if(sel==2) /* 按姓名查询 */

{

SC("=====>请您输入要查找的姓名:"); scanf("%s",findmess);

p=Locate(l,findmess,"Name");

if(p)

{

SC("\t\t\t\t查找结果\n"); printstart();

printe(p);

printstart();

}

else

Nofind(); }

else

Wrong(); }

void Del(Link l) /* 本函数用于删除学生信息 */ {

int sel;

Node *p,*r;

char findmess[20];

if(!l->next)

{ SC("\n=====>提示:没有资料可以删除!\n"); return; } SC("\n=====>1.按学号删除\n=====>2.按姓名删除\n"); SC("温馨提示:请输入1或2选择删除方式:"); scanf("%d",&sel);

if(sel==1)

{ SC("=====>请您输入要删除的学号:");

scanf("%s",findmess);

p=Locate(l,findmess,"Number");

if(p)

{

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);

SC("\n=====>温馨提示:该学生信息已经成功删除!\n"); shoudSave=1;

}

else

Nofind();

}

else if(sel==2)

{

SC("=====>请您输入要删除的姓名:");

scanf("%s",findmess);

p=Locate(l,findmess,"Name");

if(p)

{

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);

SC("\n=====>温馨提示:该学生信息已经成功删除!\n");

shoudSave=1;

}

else

Nofind();

}

else

Wrong();

}

void dellall() /* 本函数用于删除所有学生信息(即直接删除文件) */ {

getchar();

char jian2;

SC("\n=====>温馨提示:确定删除全部学生信息吗?(Y/N):");

scanf("%c",&jian2);

if(jian2=='y'||jian2=='Y')

{

system("del .\\student.txt");

SC("\n=====>温馨提示:所有记录删除成功!按任意键退出系统!......\n");

exit(0);

}

if(jian2=='n'||jian2=='N')

{

SC("\n=====>温馨提示:记录尚未删除! ......\n");

}

else

Wrong();

}

void Modify(Link l) /* 本函数用于修改学生信息 */

{

Node *p;

char findmess[20];

if(!l->next)

{

SC("\n=====>温馨提示:没有资料可以修改!\n");

return;

}

SC("请您输入要修改的学生学号:");

scanf("%s",findmess);

p=Locate(l,findmess,"Number");

if(p)

{

SC("=====>请您输入新学号(原学号%s):",p->data.Number); scanf("%s",p->data.Number); getchar();

SC("=====>请您输入新姓名(原姓名%s):",p->data.Name); scanf("%s",p->data.Name); getchar();

SC("=====>请您输入新性别(原性别%s):",p->data.Sex); scanf("%s",p->data.Sex); getchar();

}

else

Nofind();

}

void outputall(Link l) /* 本函数用于输出全部学生信息 */

{

int count=0;

Node *p;

p=l->next;

if(!p)

{ SC("\n=====>温馨提示:没有资料可以显示!\n"); return; }

SC("\n\t\t\t文件中所有学生的记录如下\n\n");

printstart();

while(p)

{

printe(p);

printstart();

p=p->next;

}

SC("\n\n");

}

void Tongji(Link l) /* 本函数用于输出统计信息 */

{

Node *page,*page2; /* 用于指向各项的接点 */

Node *r=l->next;

if(!r)

{

SC("\n=====>温馨提示:没有资料可以统计!\n");

return ;

}

page=page2=r;

while(r!=NULL)

{

if(r->data.Age<=page->data.Age) page=r;

if(r->data.Age>=page2->data.Age) page2=r;

r=r->next;

}

SC("------------------------------统计结果--------------------------------\n");

SC("=>年龄最小者:\t姓名:%s %s岁\n",page->data.Name,page->data.Age); SC("=>年龄最大者:\t姓名:%s %s岁\n",page2->data.Name,page2->data.Age); printstart();

}

void Save(Link l) /* 本函数用于保存文件更改 */

{

FILE* fp;

Node *p;

int flag=1,count=0;

fp=fopen("student.txt","wb");

if(fp==NULL)

{

SC("\n=====>温馨提示:重新打开文件时发生错误!\n");

exit(1);

}

p=l->next;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p=p->next;

count++;

}

else

{

flag=0;

break;

}

}

if(flag)

{

SC("\n=====>温馨提示:学生信息保存成功.(有%d条记录已经保存.)\n",count); shoudSave=0;

}

fclose(fp);

}

void help() /* 本函数用于帮助信息 */

{printstart();

SC("\t\t\t开发者:黄莉、黄正青\n\t\t\t班级:10级计算机应用技术4班\n\t\t\t 指导老师:钟永权\n\t\t\t 版本号:V1.0\n");

printstart();

}

void exit(Link l) /* 本函数用于退出系统和保存信息改动 */

{

char jian;

{

if(shoudSave==1)

{ getchar(); SC("\n=====>温馨提示:资料已经改动,是否将改动保存到文件中(Y/N)?\n");

scanf("%c",&jian);

if(jian=='y'||jian=='Y') Save(l);

else exit(0);}

SC("\n=====>温馨提示:您已经成功退出系统,谢谢使用本系统!\n");exit(0); }

}

void password() /* 本函数用于加密模块 */

{

int password;

int i=0;

printstart();

SC("\n\t\t\t ◇ 欢迎使用学生信息管理系统 ◇ \n\n");

printstart();

SC("温馨提示:您只有三次输入密码的机会哦!");

SC("\n\n\n\n\n\n\t\t◇请您输入密码:");

while(i<3)

{

scanf("%d",&password);

getchar();

if(password==888888)

{SC("您输入的密码正确。\n");i=999;break;}

i++;}

if(i!=999)

{SC("对不起,您输入的密码不正确!系统将退出......\n");exit(0);} }

void main() /* 程序主函数 */

{

password();

Link l; /* 链表 */

FILE *fp; /* 文件指针 */

int sel; /* 选择 */

char jian; /* 选择 */

int count=0;

Node *p,*r;

l=(Node*)malloc(sizeof(Node));

l->next=NULL;

r=l;

fp=fopen("student.txt","r+");

if(fp==NULL)

{

SC("\n○●○●○●○●○●○●○●○◇学生信息管理系统◇●○●○●○●○●○●○●○●\n");

SC("\n=====>温馨提示:源文件尚未存在,是否现在创建?(Y/N):"); scanf("%c",&jian);

if(jian=='y'||jian=='Y') {fp=fopen("student.txt","w+");SC("\n=====>温馨提示:源文件创建成功!......\n");}

else

if(jian=='N'||jian=='n') {SC("\n=====>温馨提示:文件尚未创建,请按任意键退出系统......\n");exit(0);}

else {Wrong();exit(0);}

}

SC("\n=====>温馨提示:源文件已经打开,正在导入记录......\n");

while(!feof(fp))

{

p=(Node*)malloc(sizeof(Node));

if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */

{

p->next=NULL;

r->next=p;

r=p; /* 将该接点挂入连中 */

count++;

}

}

fclose(fp); /* 关闭文件 */

SC("\n=====>温馨提示:记录导入完毕,共导入%d条记录.\n",count);

while(1)

{

menu();

SC("温馨提示:请按1-9选择您的操作:");

scanf("%d",&sel);

switch(sel)

{ case 1:Add(l);break; /* 输入学生的资料 */

case 2:Del(l);break; /* 从文件调入资料 */

case 3:Qur(l);break; /* 查询学生的成绩 */

case 4:Modify(l);break; /* 删除学生的资料 */

case 5:Save(l);break; /* 追加学生的资料 */

case 6:Tongji(l);break; /* 显示学生的资料 */

case 7:dellall();break; /* 统计学生的成绩 */

case 8:outputall(l);break; /* 保存输入的资料 */

case 9:help();break; /* 对成绩进行排序 */

case 0:exit(l);break; /* 退出系统 */

default:Wrong();getchar();break;}

}

}

相关推荐