学生通讯录管理系统(C语言课程设计实验报告)

2024-08-12

学生通讯录管理系统(C语言课程设计实验报告)(通用7篇)

学生通讯录管理系统(C语言课程设计实验报告) 篇1

C语言课程设计学生通讯录管理系统设计

一、题目内容的描述

学生通讯录管理系统设计

设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜单,其它各功能都用各自的函数实现。

功能要求如下:

1、能建立、修改和增删学生通讯录

2、能够按多种方式进行查询,例如按姓名、按电话号码等。

3、通讯录的数据保存在文件中,运行程序时将通讯录数据从文件读取到内存中。对通讯录进行增加、删除、修改学生数据后,提供功能菜单,可以将内存中修改过的通讯录重新保存至文件。

二、应用程序功能的详细说明

1、应用程序实现了可视化的系统操作界面。

2、对学生通讯录形成了系统化的管理,操作简便明了。

3、程序具有系统帮助,添加、显示、查询、刷新、删除、排序、保存、修改、读取学生通讯录的功能。各项功能均可按照文字提示操作,浅显易懂。

4、系统的各个功能模块都用函数的形式来实现(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。

5.可以将信息保存在文件(“student.txt“)中,亦可将信息从文件中读取出来,灵活方便。

三、主要模块的算法描述

学生通讯录管理系统

刷新学生信息readfile()

查询学生信息seek()

增加学生信息insert()

显示学生信息display()

退出系统

修改学生信息modify()

删除学生信息del()

保存当前学生信息save()

汇总当前学生数目number()

系统帮助help()

查询学生信息

按姓名查询

退出

按学号查询

开始

以可读写的方式打开一个数据文件

将此文件的内容读出,并存入一个新的结构体类型的数组中。

调用menu()菜单函数

进入while()主循环

输入1-8中的一数值,选择相应操作。

输入是否为0

判断键值,调用相应函数,完成相应功能。

是否已对修改存盘

调用函数save()函数,进行写数据文件操作

结束

模块一:头文件,变量定义,函数的声明

对系统所使用的变量进行定义,对函数进行声明。

模块二:录入学生信息

声明函数void

readfile(),说明一个文件指针FILE

*fp打开文

件“student.txt“。

模块三:学生信息的查找

声明void

seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支。

模块四:学生信息的修改

声明void

modify()为学生信息修改函数,通过switch(item)设定

所要修改的项目。

模块五:刷新学生信息

声明void

sort()将录入学生系按升序排列,用的是“冒泡排序法”

实现排序。

模块六:增加学生信息

声明void

insert()插入学生信息,先通过判断学生是否存在,若

否则继续输入,若是则跳出,重新循环。

模块七:删除学生信息

声明void

del()实现学生信息删除,通过学号对比确定要删除的信

息,然后用后一个替换掉。

模块八:显示学生信息

通过display()函数输出学生信息。

模块九:保存信息

通过fp=fopen(“student.txt“,“w“);写入信息。

模块十:汇总学生数目

通过number()函数将已有男女生及总学生数目汇总出来。

模块十一:系统帮助

通过help()函数帮助操作。

模块十二:界面菜单

通过switch(num)调用以上各函数,实现功能。

1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。

2、其中主要模块(readfile()、seek()、modify())都是利用数组,指针来实现数据结构设计。

3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人

是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。学号为主索引。

四、结束语

我设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点:

1、首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用;

2、学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便;

3、解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方!

4、在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C语言编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C语言编写这些小游戏。曾经认为C是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具!

五、程序源代码清单

#include

#include

#include

#define

BUFLEN

#define

LEN

#define

N

struct

record

{

char

code[LEN+1];

char

name[LEN+1];

int

age;

char

sex[3];

char

time[LEN+1];

char

add[30];

char

tel[LEN+1];

char

mail[30];

}stu[N];

int

k=1,n,m;

void

readfile();

void

seek();

void

modify();

void

insert();

void

del();

void

display();

void

save();

void

number();

void

menu();

int

main()

{

while(k)

menu();

system(“pause“);

return

0;

}

void

readfile()//刷新学生信息

{

char

*p=“student.txt“;

FILE

*fp;

int

i=0;

if

((fp=fopen(“student.txt“,“r“))==NULL)

{

printf(“Open

file

%s

error!

Strike

any

key

to

exit!“,p);

system(“pause“);

exit(0);

}

while(fscanf(fp,“%s

%s%d%s

%s

%s

%s

%s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)

{

i++;

i=i;

}

fclose(fp);

n=i;

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

}

void

seek()//查询学生信息

......void

modify()//修改学生信息

......void

sort()//对学生信息按学号排序

{

int

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

char

temp[10];

for(i=0;i

{

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

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

{

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

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

strcpy(stu[j].code,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].time);

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

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

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

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

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

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

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

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

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

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

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

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

q=&stu[j].age;

s=*q;

*q=*p;

*p=s;

}

}

}

void

insert()//增加学生信息

......void

display()//显示当前学生信息

{

int

i;

printf(“所有学生的信息为:\n“);

printf(“学生学号,学生姓名,年龄,性别,出生年月,地址,电话,E-mail\n“);

printf(“--------------------------------------------------------------------\n“);

for(i=0;i

{

printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

}

void

save()//保存当前学生信息

{

int

i;

FILE

*fp;

fp=fopen(“student.txt“,“w“);

for(i=0;i

{

fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

fclose(fp);

}

void

number()//汇总学生数目

{

int

i,girl,boy=0;

for(i=0;i

if(strcmp(stu[i].sex,“1“)==0)

{boy++;}

girl=n-boy;

printf(“男生人数是:%d\n女生的人数是:%d\n“,boy,girl);

printf(“总的学生人数为:%d“,n);

}

void

help()//系统帮助

{

printf(“输入性别时男为1,女为2“);

printf(“\n3.增加学生信息后,切记保存按7;\n“);

printf(“\n4.谢谢您的使用!\n“);

}

void

menu()//可视化的系统操作界面

{

int

num;

printf(“

\n\n

学生通讯录管理系统

\n\n“);

printf(“

*********************系统功能菜单************************

\n“);

printf(“

--------------------------------

-------------------------------

\n“);

printf(“

1.刷新学生信息

2.查询学生信息

\n“);

printf(“

*********************************************

\n“);

printf(“

3.修改学生信息

4.增加学生信息

\n“);

printf(“

*********************************************

\n“);

printf(“

5.按学号删除信息

6.显示当前信息

\n“);

printf(“

*********************************************

\n“);

printf(“

7.保存当前学生信息

8.汇总学生数目

\n“);

printf(“

*********************************************

\n“);

printf(“

9.系统帮助

10.退出系统

\n“);

printf(“

---------------------------------

------------------------------

\n“);

printf(“

************************************************************

\n“);

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

scanf(“%d“,&num);

switch(num)

{

case

1:readfile();break;

case

2:seek();break;

case

3:modify();break;

case

4:insert();break;

case

5:del();break;

case

6:display();break;

case

7:save();break;

case

8:number();break;

case

9:help();break;

case

10:k=0;break;

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

}

}

学生通讯录管理系统(C语言课程设计实验报告) 篇2

为提高实验设计的科学性与合理性, 促进C语言程序设计课程教学效果提升, 让学生通过实验操作提高实践技能, 科学合理设计实验内容是十分必要的。

1.1概念。综合性实验是指实验内容涉及课程综合知识的实验, 设计性实验是指独立于课本内容的探究性实验, 要求学生善于发现问题。并综合应用所学知识设计实验方案, 认真探究相关内容, 发现问题和解决问题, 并得出结论, 深化对相关内容的理解。

1.2作用。教学中通过综合性和设计性实验的设计和应用, 具有重要作用。不仅能推动课程教学顺利进行, 加深学生对C语言程序设计教学内容的理解。还能培养学生善于发现问题和解决问题的能力。通过自主探究和深入体会, 深化对所学内容的认识, 增强知识应用技能和创新能力, 促进教学效果和学习效率提升。

二、综合性和设计性实验的对策

2.1合理设计实验内容。实验设计时, 根据教学目标和人才培养流程, 规划不同的设计性、综合性实验, 为后续实验课程教学的有效开展奠定基础。设计性实验包括:根据输入日期求是该年度的第多少天?编写判断素数的函数, 编写带参数的宏定义等。综合性实验包括:应用流程控制语句、模块化设计方法、丰富的数据类型设计与实现“学生管理系统”。对这些内容进行科学合理安排, 采用有效的教学方法, 有利于实验教学顺利进行, 提高课程教学效果和质量。

2.2有效实施实验过程。设计性实验实施过程中, 要求学生根据实验题目设计算法, 并实现算法功能。课前针对实验内容提出问题, 让学生通过思考之后再回答, 例如, 如何实现闰年和素数的判断等。这些问题有利于学生加深对理论知识的理解, 将其用来解决实际问题。对学生的疑惑, 任课老师进行适当引导, 让学生自己思考和探究, 得出正确答案。综合性实验实施过程中, 以“学生成绩管理系统”为任务, 从输入/输出语句开始, 再过渡到编写函数, 学习结构选择、循环控制和数组, 再学习存储和处理个人数据, 在“文件”这一章中完成学生成绩管理系统的编制。再进行调试, 提升系统功能, 保证系统能够得到更为合理有效的利用。

2.3科学进行实验考核。设计性实验考核时, 学生提交实验报告和源程序代码, 同时详细记录实验中出现的问题, 修改方法和运行结果, 让任课老师对这些内容有全面的了解, 掌握学生实验过程中的基本情况。综合性实验考核中, 学生要提交实验报告和全部源程序代码, 并要求学生进行答辩, 任课老师可针对实验内容提问, 由学生回答。

三、综合性和设计性实验的效果

整个实验教学过程中, 有利于师生间的互动与交流, 学生对实验中遇到的疑惑能及时提出, 任课老师可以及时为学生回答问题, 帮助学生解答疑惑, 为学生更好探究知识创造条件。但任课老师采用的是引导式方式指导学生, 学生是在任课老师引导下完成学习任务, 达到提高实践操作技能的目的。实验完成后进行的回访和调查显示, 学生能将理论知识和编程技能巧妙结合起来, 有效掌握所学内容, 深化对实验内容和相关理论知识的认识。85%的学生反映, 采用综合性和设计性实验方式, 不仅增强学生的自主学习技能和探究能力, 还能深化对理论知识的理解, 掌握很多的重要技能。此外, 提高学生分析和解决复杂问题的能力, 拓展学生视野, 对C语言程序设计有更为全面和详细的认识。为以后在工作中独立解决问题打下坚实基础, 对学生以后的学习和工作也具有积极作用。

四、结束语

实验是C语言程序设计课程教学不可忽视的内容。作为任课老师, 应该认识其重要作用, 根据教学目标和人才培养要求, 有效开展综合性和设计性实验, 遵循实验操作步骤, 做好评价考核工作。从而推动课程教学顺利进行, 提高教学效果和学生的实践技能, 也为学生以后更好从事自己的工作打下基础。

参考文献

[1]钱言玉.《C语言程序设计》课程实验教学研究[J].合肥师范学院学报, 2014 (3) , 86-87, 100

学生通讯录管理系统(C语言课程设计实验报告) 篇3

【关键词】C语言 程序设计 实验 考核体系

【中图分类号】G64【文献标识码】A 【文章编号】2095-3089(2016)37-0234-01

1.引言

C语言程序设计(实验)通过上机实践,可以帮助学生巩固课堂教学的理论知识,真正体现学生将知识“内化”的过程[1],意在培养学生分析问题、解决问题的实际动手能力和创新能力。传统的实验课程考核方式单一,不能公正的评价学生的实际综合能力。为了全面培养学生的学习兴趣、全面考查学生的综合知识点,全面注重学生的创新能力和实践能力的提高,以达到培养创新人才的目的,切实推进课程考核改革及考核体系已经刻不容缓[2]。

2.课程简介

程序设计基础是一门专业基础课,这门课通过全面、深入、系统地介绍程序设计方法和程序设计语言,使学生初步建立起程序设计的基本概念,通过学习一种典型的程序设计语言(C语言),初步掌握程序设计方法,具有一定的程序设计能力。我院的程序设计基础(C语言)分上下两个学期,程序设计基础(一)和(二),程序设计实验是单独的一门课程,有程序设计基础(一)实验和(二)实验,实验内容主要是辅助,强化理论各个章节的知识点,提高学生的动手能力为目的进行设计的。

本考核体系是基于程序设计基础(一)实验设计的。我院程序设计基础(一)主要的内容有:数据的表示、组织和处理、程序的基本结构控制(顺序、选择和循环)。

3.現行的考核方式

现行的考核方式比较单一,是从三个方面进行成绩给定:(1)考勤;(2)实验报告;(3)创新设计。这里的(2)和(3)都是以实验报告来给定成绩,其中一部分以实验报告的书面结果给定成绩,另一部分以答辩实验报告的方式给定成绩。现行的考核方式不能公正的评定学生的实际综合能力,也没有促进学生进行创新设计。

4.全程考核体系的构建

全程考核体系意在促进学生核心能力的提升,在学习过程和学习结果两个维度上设置考核指标:过程考核可以提高课程的教学质量,培养学生的学习能力以及提高学生的协作能力、表达能力、沟通能力等综合素质;结果考核目标是使学生掌握基本理论、基本知识的基础上增强职业素养与专业技能,提高分析问题及解决问题的能力。

全程考核体系:

(1)考勤

考勤是学生学习的基础和保证,能促使学生养成遵章守纪的习惯,以培养学生进行自我管理。每次实验使用E-learning系统进行签到记录。

(2)实验报告

实验课中,教师观察、了解学生学习的过程,学生参与课堂活动的广度和深度,学生学习过程中表现出来的解决问题的能力。而实验报告是实验过程中唯一存档的资料,是值得重视的环节。教师根据学生的实验报告的完成步骤、完成程度以及答辩等对每次实验进行综合评价。

(3)综合大作业

为培养学生的创新能力及实践工程能力,让学生以三人一组,综合运用所学知识,共同自主学习、相互启发、收集资料、团队协作开发一个趣味性、实用性的小系统。

大作业从三个方面给定成绩:一是系统的整体评价;二是团队分工;三是团队成员各自答辩情况。

成绩给定之一:系统的整体评价包括科学正确性、趣味性/适用性、界面的清晰性。成绩给定之二:根据团队的分工,评价团队各成员的工作量。成绩给定之三:团队成员各自的答辩情况加入各自的成绩。

(4)期末无纸化考试

为对学习结果进行公正的考核,且激发学生对C语言的热爱,我们用C语言编写了一个无纸化考试系统,并让学生观摩编制考试系统中的主要算法。考试系统的中的试题均为编程题目,按照实验教学大纲的知识模块将试题划分成几个组,每个组中的题目难度相当,考试系统从每个组中抽取一道编程题目,随机组成程序设计试卷。

考试过程中,为保证公正,避免学生考试上网查阅资料,使用E-learning系统控制学生,禁止其使用电脑的浏览器、U盘。

考试成绩从三个方面给定:一是程序结果,单纯地考核程序运行的正确性;二是程序设计思路;三是理论基础知识。

5.结束语

本考核体系应用于本学院15级数字媒体专业,将考核贯穿于整个学习过程中,调动了学生学习的兴趣,学生的实践能力和创新能力得到了一定的提升,能更公正地评价学生的综合能力,学生也表现出了对该门课程的热情和自信,本考核体系得到了学生的一致认可。

参考文献:

[1]王丽娜,吕红,张杰,任颖.《计算机程序设计实验》课程的教学改革与实践.计算机工程与科学.2014年.第A1期.

C语言程序设计实验报告 篇4

实验目的

1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。

2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。

3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

实验内容

计算并输出1000以内的10个素数以及它们的和。

要求:

在程序内部加必要的注释。

由于偶数不是素数,可以不考虑对偶数的处理。

虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。

输出形式为:素数1+素数2+素数3+…+素数10=总和值。

算法描述流程图

Main函数:

判断素数:

源程序

#include

#include

int sushu(int n)/* 判断素数的函数 */

{

int t,i;

t=sqrt(n);

for(i=2;i1;i-=2)/* x为奇数时,做函数计算 */

{

n=sushu(i); /* 做判断素数的函数调用 */

( 励志天下 )

if(n!=0)/* 对素数的处理 */

{

a[j]=n;/* 把素数由大至小存入数组a[ ]中 */

j++;

if(j<11)

m+=n;/* 统计前10个素数之和 */

}

}

if(j<10)/* 当素数个数小于10个时,结果输出 */

{

for(i=0;i

{

n=a[i];

printf(“%d”,n);

printf(“+”);

}

printf(“2=”);

printf(“%d ”,m+2);

}

else for(i=0;i<10;i++)/* 当素数个数大于等于10个时,结果输出 */

{

n=a[i];

printf(“%d”,n);

if(i<9)

printf(“+”);

else

{

printf(“=”);

printf(“%d ”,m);

}

}

}

}

测试数据

分别输入1000、100、10测试。

运行结果

出现问题及解决方法

当素数个数小于10时的处理不够完善,考虑不够周全。把“+2”的处理做的太勉强。

程序过大,不够精简,无用文字太多。

学习耐心与细心不足,如scanf(“%d”,&n);中的“&”经常忘记。

编程思想不够发散,例如如何判断素数,只能想出2种方式(其中1种为参考教科书上内容);在今后学习中应更多的动脑,综合运用所学。

基本功不够,如清屏clrscr等函数用的不好,有时同样的问题多次犯,给实验课老师带来很大的麻烦。这说明我的知识不够广,有很多有用但不做考试要求的书中内容没有学好,认识程度不够深刻。就算以后C语言这门课程结束后,也应多看相关东西,多上机练习,才能真正从本质上提高自己。

物理实验报告 ·化学实验报告 ·生物实验报告 ·实验报告格式 ·实验报告模板

学生通讯录管理系统(C语言课程设计实验报告) 篇5

计算机x班

XXX 学号XXXXXXXXX 1.程序源代码

实践4:结构体编程练习(2课时)2.在屏幕上模拟显示一个数字式时钟 #include struct clock { int hour;int minute;int second;};typedef struct clock CLOCK;struct clock time;void Update(){ time.second++;if(time.second == 60){

time.second = 0;

time.minute++;} if(time.minute == 60)

{

time.minute = 0;

time.hour++;} if(time.hour == 24)

{

time.hour = 0;} } void Display()

{ printf(“%2d:%2d:%2dr”, time.hour, time.minute, time.second);} void Delay(){ long t;for(t=0;t<400000000;t++){

} }

void main(){ long i;printf(“请输入时钟起始时间:”);scanf(“%d %d %d”,&time.hour, &time.minute, &time.second);for(i=0;i<100000;i++)

{

Update();

Display();

Delay();

} }

3.遇到的问题及解决方法

问题1:编写时钟函数?

解决方法:每60秒进一位,即一分钟;每60分钟进一位,即一小时。在函数体内用循环,在主函数中调用。

问题2:添加起始时间?

解决办法:由用户输入时间,将时间给结构体变量。

问题3:时间变化太快? 解决办法:要使用一个函数来缓冲每一秒的变化时间。

4.总结(心得体会)

这是“C语言课程实践”的第四次实践,也就是本学期最后一次实践。题目简单,主要是使用了结构体。

原题目是使用了全局变量,而现在是要求使用结构体。结构体内的成员毫无疑问是小时、分钟和秒,然后需要编写一个时间变化的函数。然后在主函数中调用该函数,并由负责输出的函数输出时钟,但是在编译过程中发现时间变化太快,这就需要用到缓冲,来增加每一秒变化的时间。

最后我发现该题目有些不足,为什么不能由用户输入时间,然后以此时间开始呢?于是就增加了一个由用户输入的功能。

C语言设计课程实训报告 篇6

课程设计报告

课 程 名 称: 课程设计题目: 姓

名:

系:

业: 年

级: 学

号: 指 导 教 师:

C语言设计课程设计

万年历

信息工程系

计算机科学与技术

2012

2013 年月 12 日

任 务 书

实训的目标

1.进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。

2.针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

3.掌握C语言的编程技巧和上机调试程序的方法。4.掌握程序设计中的常用算法。

任务名称:万年历

项目功能:

1、能够显示当前月的日历以及标志出当前日期。

2、可以翻页、翻年。

3、可以输入年月日查看输入的年月的日历。

4、拥有记事本的功能。

教师签名:

目录

一、实训要求:................................................................................................................4 1.掌握时间函数的运用。................................................................................................4 2.掌握在WinTC下的动画制作。...................................................................................4 3.掌握bioskey和随机函数的运用。.............................................................................4 4.学会边界的判断。........................................................................................................4 5.掌握链表和文件。........................................................................................................4 6.综合所学内容编写一个程序。....................................................................................4

二、实训题目:.......................................................................................................................4 1.①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。4

2.①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。................4 3.①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。...................................................................................................................4 4.①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。...................................................................................................4 5.万年历............................................................................................................................4

三、实训过程:.......................................................................................................................4 1.时间函数:....................................................................................................................4 思考过程:.......................................................................................................................4 2.动画制作:....................................................................................................................4 思考过程:.......................................................................................................................4 障碍物(边界判断)...........................................................................................................4 思考过程...........................................................................................................................4 链表及文件:.......................................................................................................................4 思考过程...........................................................................................................................4 1.课程设计:万年历(带记事本功能)........................................................................5 ① 思考过程.....................................................................................................................5 ②源代码:.......................................................................................................................5 ③ 运行结果...................................................................................................................10

四、实训心得:.....................................................................................................................11

一、实训要求:

1.掌握时间函数的运用。

2.掌握在WinTC下的动画制作。3.掌握bioskey和随机函数的运用。4.学会边界的判断。5.掌握链表和文件。

6.综合所学内容编写一个程序。

二、实训题目:

1.①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。2.①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。

3.①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。

4.①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。5.万年历

三、实训过程:

1.时间函数:

a)思考过程: 第一小题:先把系统当前时间用time函数转换成秒,再把输入的天数用24乘3600秒转换成秒,再与系统当前的秒数相加减,最后用ctime函数以字符串输出。第二小题:调用localtime取得系统当前年月日,然后把当前年月日提取出来用自己输入的年月日进行替换,用mktime把该年月日转换成秒,然后再把系统当前时间转换成秒,两个秒数进行相加减,把加减后的结果除以(24*3600)就得到相差的天数。第三小题和第二小题同理,输入两个日期、转换成秒以后相加减,最后除以(24*3600),就得到了两个日子相差的天数。

2.动画制作:

思考过程:做个循环,先用白色画一个圆,然后再用背景色画一个圆把当前圆覆盖,然后改变圆心,然后在画圆再覆盖~最后循环完之后,再用白色在用位置画个圆,因为不这样干的话,屏幕上就没有最好运行的位置了…第二小题同理~ 障碍物(边界判断);

① 思考过程:第一小题:判断出上下左右移动的时候能运动的范围(即控制外边界),然后再把范围内的某些不能通过的点的范围找出来,把他们分别排除在外,其他的坐标点就是可以任意移动的了,用bioskey计算按下的键的键值,然后判断可以移动之后,就在当前位置用背景色画一个方框,然后在移动之后的位置用白色画方框和障碍物等。第二小题划定一个匡,然后在匡的范围再把小球的半径减去,就是最后小球能运动的范围了…然后我设置的是让小球逆时针转动,然后用随机函数(系统时间做种子)来控制小球偏移的位置(或者说角度)。

链表及文件: ① 思考过程:第一个问题需要做的是结构体的认识并运,定义一个结构体,然后输入内容,然后再输出之前输入的内容。第二个问题则是创建链表并输出,将一个节点分成了两份,一边是指针域,一边是数据域,而指针域,指针域是下一节点的地址,我把头结点不存储数据,以方便之后两题的操作;第三个问题是删除链表,首先定义一个空的字符串,P,P1,P2,把头指针赋值给P,随后让用户输入要删去数据的名字,储存在字符串中,利用strcmp函数进行查找,随后如果第一个有数据的节点就符合要求,就把第二个节点的地址赋值给头节点的指针域后跳出循环,如果不是第一个节点符合要求就执行循环,让P赋值给P2,再把p->next赋值给P,这时P就到了下一个节点,再把p->next赋值给P1,也就是让P1得到第三个节点的首地址,P指向第二个节点,P2指向第一个节点,再进行循环,还是没找到就把P,P1,P2同时向后移动一个节点,如果找到了,就把P2的值赋给p->next,再把p->next的值赋给P,这时P就回到了上一个节点,再把p->next直接指向P1,就把中间的那个节点跳过,完成了删除功能;第四个问题则是增加节点,同样定义一个整型数据(即学号),P,P1,P2,P3,让用户键入想要添加的位置,之后让头指针赋值给P,p->next就赋值给P1,也就是让p1指向下一个节点,随后执行循环,让用户输入想学号和每个节点内的学号比较,如果找到了,就创建一个新的链表,并让P3指向它,让用户输入添加的信息,并且把p->next赋值给P2和P,这是P就到了下一个节点,再把p->next赋值给P1,也就是让P1指向第二个,P和P2都指向第一个,返回循环,如果符合要求就让p3->next指向P1,p2->next指向P3,这样,新的节点就进入了链表中,满足要求,最后在主函数中先输入数据,然后执行一个死循环,让用户选择功能,如果选择1就删除一个节点,选择2就增加一个节点,选择0就跳出循环结束程序。1.课程设计:万年历(带记事本功能)

① 思考过程:用localtime取得当前的系统时间,并且提取出年月日,然后把公元元年到今年一月一日前的天数计算出来,把这个天数除7取余为a,然后就获得了今年元旦前的一天是星期几。然后循环、从一月循环到当前月的上一月的最后一天,在这个循环中,循环一次a+1;当a=7时a置零,这个是用来计算当前月的上一月的最后一天是星期几,然后从新在次循环外另开一个循环来输出当前月的日历,并标记出今天用()标记,然后用bioskey读取用户按下的键值,并实现相应的翻页、标记特殊日子、记事本、从新输入年份等功能…

②源代码:

#include #include #include void f();

/*计算公元元年到某年某月的时间*/ void f1(long int t,long int n,int y,int r);

/*按日历模式输出要得到的那个月的日历*/ void w();

/*当前月的日历*/ void s();

/*输入某个年份和月份*/ void m(long int n,int y,int r);

/*记事本功能的函数*/

struct jishiben

/*记事本的结构体定义*/ {

long int a;

char name[100];};

void w()

/*输出当前月的日历*/ {

int y,r,a,b,c;

/*分别定义月份日期以及记录键值记录日期以及某月最后一天*/

long int n;

/*定义年份的变量*/

time_t timep;

struct tm *p;

time(&timep);

p=localtime(&timep);/*取得当地时间*/

printf(“%d--%d--%d n”,(1900+p->tm_year),(1+p->tm_mon), p->tm_mday);/*输出当前的年月日*/

n=(1900+p->tm_year);

/*获得当前年份*/

y=(1+p->tm_mon);

/*获得当前月份*/

r=p->tm_mday;

/*获得当前的是几号*/

for(;;)

{

printf(“jin tian shi %d--%d--%d n”,(1900+p->tm_year),(1+p->tm_mon), p->tm_mday);

/*输出当前年月日*/

f(n,y,r);

/*调用函数f获得某年某月的日历*/

printf(“an fang xiang jian ke tiao jie nian huo yuen”);

printf(“ru xu shu ru nian fen qing an hui ge jian n”);

printf(“ruo xu shi yong ji shi ben qing an hui chen”);

if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)c=31;

if(y==4||y==6||y==9||y==11)c=30;

if(y==2&&(((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0))))c=29;

if(y==2&&((n%4!=0)||((n%100==0)&&(n%400!=0))))c=28;

/*判断月份及最后一天*/

a=bioskey(0);

/*取得按下的键值*/

if(a==18432)n=n-1;

/*按方向键向上则年份减一*/

if(a==20480)n=n+1;

/*按方向键向下则年份加一*/

if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}}

/*按方向键向左则月份减一*/

if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}}

/*按方向键向右则月份加一*/

if(a==18488){b=r;r=r-7;if(r<1)r=b;}

/*按小键盘8则上一周*/

if(a==19509){b=r;r=r+7;if(r>c)r=b;}

/*按小键盘5则下一周*/

if(a==19252){b=r;r=r-1;if(r<1)r=b;}

/*按小键盘4则上一日*/

if(a==19766){b=r;r=r+1;if(r>c)r=b;}

/*按小键盘则下一日*/

if(a==7181)m(n,y,r);

/*调用m函数 进行记事本功能*/

if(a==3592)s();

/*按回格键调用函数s 出入年份和月份*/

if(a==283)exit(0);

/*按esc键 直接退出程序*/

system(“CLS”);

} } void f(long n,int y,int r)

/*计算公元元年一月一号到某年的天数n y r为年月日*/ { long int i,t;

/*定义 i为循环变量

t为天*/ t=0;for(i=1;i

if(((i%4==0)&&(i%100!=0))||((i%100==0)&&(i%400==0)))/*判断闰年*/

t=t+366;

if((i%4!=0)||((i%100==0)&&(i%400!=0)))

/*判断平年*/

t=t+365;

if(t%7==0)

/*为防止数据过大 所以当t除7的余数是0的时候,让t=0;*/

t=0;} f1(t,n,y,r);

/*调用函数f输出某月的日历*/ }

void f1(long int t,long int n,int y,int r)

/*按日历模式输出某月的日历n y r为年月日*/ { int i,j,k,a;

/*a为记录星期的*/ a=t%7;for(i=1;i

/*循环到某月的前一个月*/

{

for(j=1;;j++)

{

a=a+1;

if(a==7)a=0;

if((i==1||i==3||i==5||i==7||i==8||i==10||i==12)&&j==31)break;

if((i==4||i==6||i==9||i==11)&&j==30)break;

if(i==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break;

}

}

printf(“%ld nian %d yue ri lin”,n,y);printf(“ 1 n”);printf(“MON TUE WED THU FRI SAT SUNn”);for(k=0;k

”);for(j=1;;j++)

/*按日历模式输出某月*/ {

if(j==r)printf(“(%2d)”,j);

/*标记出当前的日子以及特殊的日期*/

else printf(“ %2d ”,j);

a=a+1;

if(a==7){a=0;printf(“n”);}

/*当循环一个星期以后,输出一个换行符*/

if((y==1||y==3||y==5||y==7||y==8||y==10||y==12)&&j==31)break;

if((y==4||y==6||y==9||y==11)&&j==30)break;

if(y==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break;/*判断这个月的最后一天时跳出循环*/ } printf(“n”);}

void s()

/*输入年月的函数*/ { long int n;int y,r,a;for(;;){

printf(“qing shu ru nian he yuen”);

scanf(“%ld%d”,&n,&y);

if(y<12&&y>0)break;

/*判断输入的月份是否正确*/

else printf(“yue fen shu ru cuo wun”);} for(;;){ r=0;

/*这里不需要标记处某天,所以令r=0*/ f(n,y,r);

/*调用函数f来输出需要的某月的日历*/ printf(“an fang xiang jian ke tiao jie nian huo yuen”);printf(“ru xu shu ru nian fen qing an hui ge jian n”);printf(“an r jian fan hui dang qian yuen”);a=bioskey(0);if(a==18432)n=n-1;

/*按方向键上键 则年份减一*/ if(a==20480)n=n+1;

/*按方向键下键 则年份加一*/ if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}} /*按方向键左键月份减一*/ if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}} /*按方向键右键 月份加一*/ if(a==283)exit(0);

/*按esc退出程序*/ system(“CLS”);

/*清屏*/ if(a==4978)w();

/*按小写的r 则调用函数w显示当前月的日历*/ if(a==3592)s();

/*按回格键 调用它自己 从新输入一个年月*/ } } void m(long int n,int y,int r){

long int c;

/*c是用来计算结构体长度的*/

long int s=r+100*y+10000*n;

/*转换年月日 例如2013-7-10 就转换成20130710*/

struct jishiben kefu;

/*定义结构体*/

FILE *fp;

/*定义文件指针*/

c=sizeof(struct jishiben);/*计算结构体需要的长度*/

system(“CLS”);

/*清屏*/

if((fp=fopen(“qw2.txt”,“a+”))==NULL)

/*判断这个文件是否存在*/

{printf(“da kai shi bai qing xian chuang jian gai wen jiann”);exit(-1);}

else

{

for(;!feof(fp);){fread(&kefu,sizeof(kefu),1,fp);if(kefu.a==s)break;} /*筛选数据*/

if(kefu.a==s)

{

printf(“ri qi %ld---%s n”,kefu.a,kefu.name);}

/*若得到了需要的数据 则显示出来*/

else

/*否则录入数据*/

{

/*录入前先把文件关闭掉

然后再从新以追加方式打开*/

fclose(fp);

fp=fopen(“qw2.txt”,“a”);

fseek(fp,-c,2);

printf(“qing shu ru xing xi n”);

kefu.a=s;

/*令长整型变量等于s 方便筛选*/

printf(“qing shu ru nei rongn”);

printf(“%ldn”,kefu.a);

gets(kefu.name);

/*输入字符*/

fwrite(&kefu,c,1,fp);

/*把数据写入*/

}

getch();

fclose(fp);

/*关闭文件*/

}

w();

/*返回w函数再进行相应的操作*/ }

int main(){ w();

/*调用函数w来开始第一次运行*/ getch();} ③ 运行结果

按回车实现记事本功能:

按回车返回记事本:

在特殊日子下按回车,查询是否有要做的事情:

四、实训心得:

学生通讯录管理系统(C语言课程设计实验报告) 篇7

教师奖金计算系统-C语言课程设计

#include void main(){ int a=0,b=0,c=0,d=0,e=0,f=0,g=0,i=1,j=1,h=0;int m[3];float n[3];do { printf(“nttt欢迎使用教师奖金计算系统nn”);printf(“请选择教师类型:n”);printf(“

1、专职教师n”);printf(“

2、行政n”);printf(“0、退出程序n”);scanf(“%d”,&a);

printf(“n===================n”);switch(a){ case 0:j=0;break;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

case 1: { {do

{printf(“请输入你的教师类型:n”);

printf(“

1、高级讲师n2、中级讲师n3、助理讲师n4、见习期n”);

scanf(“%d”,&b);

switch(b)

{case 1: c=10;d=40;break;

case 2: c=9;d=35;break;

case 3: c=8;d=30;break;

case 4: c=4;d=10;break;

default: printf(“n输入错误,请重新输入:n”);

}

}

while(b<=0||b>4);} printf(“n===================n”);{for(i=1;i<=3;i++)

{

printf(“请输入所代 课程%d 本周所教的课时数,最多3科,多出的输入0n”,i);

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

scanf(“%d”,&m[i]);

printf(“您输入的课时数为:%dn”,m[i]);

printf(“请输入所代 课程%d 所对应的听课人数n”,i);

scanf(“%d”,&e);

if(e<60)n[i]=1;

if(e>=61&&e<=70)n[i]=1.2;

if(e>=71&&e<=80)n[i]=1.3;

if(e>=81&&e<=90)n[i]=1.4;

if(e>=91&&e<=100)n[i]=1.5;

if(e>=101&&e<=120)n[i]=1.6;

if(e>=121&&e<=140)n[i]=1.7;

if(e>=141&&e<=160)n[i]=1.8;

if(e>=161&&e<=180)n[i]=1.9;

if(e>=181)n[i]=2.0;

printf(“您输入的课程人数为%dn课程%d对应系数为%2.2fn”,e,i,n[i]);

} }

printf(“n===================n”);

{do

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

{printf(“请选择您的教师等级:n”);

printf(“

1、A等n2、B等n3、C等n”);

scanf(“%d”,&f);

if(f==1)g=1;

else if(f==2)g=0;

else if(f==3)g=-1;

else printf(“n输入错误,请重新输入:n”);

}

while(f<=0||f>3);

}

printf(“n===================n”);printf(“n===========以下为您本月的奖金信息:===========n”);printf(“乘学时系数后本月各课程课时:n”);printf(“课程1:%2.2fn”,m[1]*n[1]*4.5);printf(“课程2:%2.2fn”,m[2]*n[2]*4.5);printf(“课程3:%2.2fn”,m[3]*n[3]*4.5);printf(“本月超课时为:%2.2fn”,(m[1]*n[1]+m[2]*n[2]+m[3]*n[3])*4.5-36);printf(“本月奖金数为:%2.2fn”,((m[1]*n[1]+m[2]*n[2]+m[3]*n[3])*4.5-36)*(d+g)+36*(c+g

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案));break;} case 2: { {do

{printf(“请选择类型:n”);

printf(“

1、普通行政(未兼课)nn2、普通行政兼课、实验室教师nn3、见习其行政(未兼课)nn4、见习期行政兼课nn5、中层领导(未兼课)nn6、中层领导兼课nn ”);

scanf(“%d”,&b);

}

while(b<=0||b>6);}

printf(“n===================n”);

switch(b)

{case 1: h=1500;

printf(“n===========以下为您本月的奖金信息:===========n”);

printf(“您本月的坐班奖金为:%dnn”,h);

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

break;

case 2:h=1500;

{do

{printf(“请输入你的教师类型:n”);

printf(“

1、高级讲师n2、中级讲师n3、助理讲师n”);

scanf(“%d”,&d);

switch(d)

{case 1: c=10;break;

case 2: c=8;break;

case 3: c=6;break;

default: printf(“n输入错误,请重新输入:n”);

}

}

while(b<=0||b>3);

}

printf(“n===================n”);

{for(i=1;i<=3;i++)

{

printf(“请输入所代 课程%d 本周所教的课时数,最多3科,多出的输入0n”,i);

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

scanf(“%d”,&m[i]);

printf(“您输入的课时数为:%dn”,m[i]);

}

}

printf(“n===================n”);

{do

{printf(“请选择您的教师等级:n”);

printf(“

1、A等n2、B等n3、C等n”);

scanf(“%d”,&f);

if(f==1)g=1;

else if(f==2)g=0;

else if(f==3)g=-1;

else printf(“n输入错误,请重新输入:n”);

}

while(f<=0||f>3);

}

printf(“n===================n”);

printf(“n===========以下为您本月的奖金信

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

息:===========n”);

printf(“您本月所教课时为:%2.2fn”,(m[1]+m[2]+m[3])*4.5);

printf(“您本月的坐班奖金为:%dn”,h);

printf(“n您本月的全部奖金为:%2.2fn”,h+((m[1]+m[2]+m[3])*4.5)*(c+g));

break;

case 3: h=700;

printf(“n===========以下为您本月的奖金信息:===========n”);

printf(“n您本月的坐班奖金为:%dn”,h);

break;

case 4: h=700;

c=4;

{for(i=1;i<=3;i++)

{

printf(“请输入所代 课程%d 本周所教的课时数,最多3科,多出的输入0n”,i);

scanf(“%d”,&m[i]);

printf(“您输入的课时数为:%dn”,m[i]);

}

}

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

printf(“n===================n”);

{do

{printf(“请选择您的教师等级:n”);

printf(“

1、A等n2、B等n3、C等n”);

scanf(“%d”,&f);

if(f==1)g=1;

else if(f==2)g=0;

else if(f==3)g=-1;

else printf(“n输入错误,请重新输入:n”);

}

while(f<=0||f>3);

}

printf(“n===================n”);

printf(“n===========以下为您本月的奖金信息:===========n”);

printf(“您本月所教课时为:%2.2fn”,(m[1]+m[2]+m[3])*4.5);

printf(“您本月的坐班奖金为:%dn”,h);

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

printf(“n您本月的全部奖金为:%2.2fn”,h+((m[1]+m[2]+m[3])*4.5*(c+g)));

break;

case 5: h=2000;

printf(“n===========以下为您本月的奖金信息:===========n”);

printf(“您本月的坐班奖金为:%dn”,h);

break;

case 6: h=2000;

{do

{printf(“请输入你的教师类型:n”);

printf(“

1、高级讲师n2、中级讲师n3、助理讲师n”);

scanf(“%d”,&d);

switch(d)

{case 1: c=20;break;

case 2: c=15;break;

case 3: c=10;break;

default: printf(“n输入错误,请重新输入:n”);

}

}

while(d<=0||d>3);

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

}

printf(“n===================n”);

{for(i=1;i<=3;i++)

{

printf(“请输入所代 课程%d 本周所教的课时数,最多3科,多出的输入0n”,i);

scanf(“%d”,&m[i]);

printf(“您输入的课时数为:%dn”,m[i]);

}

}

printf(“n===================n”);

{do

{printf(“请选择您的教师等级:n”);

printf(“

1、A等n2、B等n3、C等n”);

scanf(“%d”,&f);

if(f==1)g=1;

else if(f==2)g=0;

else if(f==3)g=-1;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

else printf(“n输入错误,请重新输入:n”);

}

while(f<=0||f>3);

}

printf(“n===================n”);

printf(“n===========以下为您本月的奖金信息:===========n”);

printf(“您本月所教课时为:%2.2fn”,(m[1]+m[2]+m[3])*4.5);

printf(“您本月的坐班奖金为:%dn”,h);

printf(“n您本月的全部奖金为:%2.2fn”,h+((m[1]+m[2]+m[3])*4.5)*(c+g));

break;

}

}break;

}

}while(j==1);

}

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

精心收集

上一篇:行政管理学复习纲要b下一篇:焊接工段岗位职责