《C语言程序设计基础》上机实验报告模版Word格式.docx

上传人:b****3 文档编号:18197098 上传时间:2022-12-14 格式:DOCX 页数:30 大小:188.85KB
下载 相关 举报
《C语言程序设计基础》上机实验报告模版Word格式.docx_第1页
第1页 / 共30页
《C语言程序设计基础》上机实验报告模版Word格式.docx_第2页
第2页 / 共30页
《C语言程序设计基础》上机实验报告模版Word格式.docx_第3页
第3页 / 共30页
《C语言程序设计基础》上机实验报告模版Word格式.docx_第4页
第4页 / 共30页
《C语言程序设计基础》上机实验报告模版Word格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

《C语言程序设计基础》上机实验报告模版Word格式.docx

《《C语言程序设计基础》上机实验报告模版Word格式.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计基础》上机实验报告模版Word格式.docx(30页珍藏版)》请在冰豆网上搜索。

《C语言程序设计基础》上机实验报告模版Word格式.docx

要求:

职工信息包括职工号,姓名,性别,年龄,学历,工资,住址,电话等(职工号不相等)。

试设计一职工信息管理系统,使之能够提供下列功能:

(1)系统以菜单方式工作

(2)职工信息录入功能(职工信息用文件保存)

(3)职工信息浏览功能

(4)职工信息查询功能,查询方式:

1)按学历查询

2)按职工号查询

(5)职工信息删除,修改功能(可选项)。

思路:

(1)录入并向文件里保存数据的实现思路:

C语言并没有提供由键盘输入数据直接录入文件的功能,只有内存变量向文件写入数据的功能,而由键盘输入数据可以到内存变量,因此实现此部分功能时,应当由键盘将数据放入变量,再由变量写入文件。

这里录入要求不采用书上例子,它是用结构体数组,我们要求只用一个结构体实现。

先将一个人的信息放入结构体,将这个结构体数据写入文件后,再将下一个人的信息继续放在这个结构体中,再将这个结构体写入文件。

这样节省内存空间。

计算并修改文件里数据的实现思路:

这部分的功能的实现应当先将文件的数据读到变量当中,在变量当中完成计算,再将数据写入文件。

如果只是修改文件的数据,并不计算,则可以直接定位到文件中相应的位置,写入数据,则把原来的数据覆盖以完成修改。

(2)向文件里追加数据的实现思路:

文件本身提供了这项功能,只要以“a”的方式打开就行。

然后向文件写入的数据,直接放在文件末尾。

(3)查找文件里是否有某项数据的实现思路:

C语言并没有提供判断文件内容的功能,必须将文件内容读到变量里再进行判断。

实际的查找可能是在大量的数据里的查找,高效的查找是折半查找(下学期的数据结构专门讲这一内容),折半的前提是排序,因此需先对排序后的文件读出,以折半方式查找。

(这要要求,是希望巩固折半查找与排序两个重要算法,至于它的时空效率是否高,可以学完《数据结构》知识后自己再判断)。

(4)根据要求显示文件里的某些数据或全部数据的实现思路:

C语言没有提供将文件内容显示的功能,所以需要将文件内容读到变量里,再显示变量。

(5)在文件里插入或删除某项数据的实现思路:

C语言同样没有直接提供该项功能,因此必须借由内存变量完成。

由以前的知识知道,在大量的数据里删除一个数,用数组表示不合适,因为涉及到大量的数据的移动,用链表是合适的,效率高(关于这一点,在《数据结构》这门课有详细的讲解)。

因此完成这部分操作要求用链表实现,先将文件里的数据读出组织成链表,在链表上完成插入与删除后,再将链表中的数据写入文件。

(6)按某个数据项进行排序生成排序文件的实现思路:

排序是在数组里实现。

因此先要将文件里的数据读到数组里,将数组排完序后,再将数据写入文件(一般写入一个新文件)。

四【上机调试程序流程图】

1.显示主菜单(以如下程序作为介绍)

2.添加职工信息

3.浏览职工信息。

4.查询职工信息。

4

(1)根据标号查询职工信息。

(2)根据姓名查询职工信息。

(3)根据年龄查询职工信息。

5.修改职工信息。

浏览修改后的职工信息。

6.删除职工信息。

浏览删除后的职工信息。

7.用链表添加职工信息。

浏览添加后的职工信息。

五【上机调试中出现的错误信息、错误原因及解决办法】

1.光条菜单的错误:

刚开始只能用键盘上的英文字母控制光条上下移动,想用上下箭头的ASCII代码,结果错误不能上下移动

解决方法:

使用键盘扫描码。

2、浏览函数scan()在调试和链接的时候都没有出现错误提示,但在运行的时候出现了问题。

写入指定位置的文件,打开后总会有乱码。

与c语言课本上的例题对照后发现,我写的fopen("

wenjian"

"

ab"

)没有指定文件的存储类型。

在文件名wenjian后面加上.txt后即可。

3.浏览函数scan()遇到的问题虽然不大,但解决起来很麻烦。

理想的运行结果是美观整齐。

即下面的职工信息分别与第一个printf输出的中文项目提示对齐。

不断修改空格个数,不断运行察看效果。

4.程序运行后菜单界面不消失

使用清屏函数,是每次运行后界面还原。

5.功能函数运行完后会跳出界面,直接退出。

在每个功能函数的后面加如返回值。

六【上机调试后的源程序及还存在的问题】

源程序:

#include<

stdio.()*清屏*

{

inti,j;

gotoxy(1,1);

textbackground(RED);

for(i=1;

i<

=25;

i++)

for(j=1;

j<

=80;

j++)

cprintf("

"

);

clrscr();

}

voidInitial()*定义初始化程序的函数*

charlist[7][20]={"

1.Add"

*菜单名*

"

2.Scan"

3.Edit"

4.Modify"

5.Delete"

6.Into"

7.Exit"

};

cleanscreen();

textbackground(YELLOW);

=14;

i++)*画窗口*

{

{

if(i==1||i==14||j<

=2||(j>

=79))

cprintf("

elseif(i>

=3&

&

=12&

j>

=5&

=76)

else

printf("

}

}

gotoxy(32,4);

textcolor(BLACK);

cprintf("

WELCOME!

"

gotoxy(31,14);

WorkerSystem--BYGK"

for(i=0;

7;

i++)*显示菜单*

gotoxy(34,i+6);

cprintf("

%s"

list[i]);

voidPrintPause()*暂停*

printf("

Pressanykeytogoon..."

getch();

voidGuangtiao(intflag)*定义画光条的函数*

gotoxy(34,flag+5);

textcolor(WHITE);

textbackground(BLACK);

list[flag-1]);

textcolor(LIGHTGRAY);

intAdd()*添加信息*

WORKERBASICnew;

FILE*fp=NULL;

charch='

y'

;

while(ch=='

cleanscreen();

printf("

Pleaseinputtheworker'

sNo."

scanf("

%d"

&

new.No);

getchar();

sage:

new.age);

sname:

new.name);

if((fp=fopen("

wenjian.txt"

))==NULL)

fp=fopen("

wb"

if(fwrite(&

new,sizeof(WORKERBASIC),1,fp)!

=1)

printf("

addfailed!

\n"

PrintPause();

fclose(fp);

whethergoon(yorn):

%c"

ch);

return0;

intScan()*查看信息*

WORKERBASICload;

intn=0;

if((fp=fopen("

rb"

cannotfindwenjian!

PrintPause();

return0;

---\n"

No.\tworker'

sage\tworker'

name\n"

while(!

feof(fp))

if(fread(&

load,sizeof(WORKERBASIC),1,fp)==1)

n++;

else

break;

%d\t%d\t\t%s\n"

load.No,load.age,load.name);

total:

%d\n"

n);

fclose(fp);

PrintPause();

voidexchange(WORKERBASIC*max,WORKERBASIC*min)*调换两个职工在数组中的位置*

WORKERBASICt;

strcpy(t.name,max->

name);

t.No=max->

No;

strcpy(max->

name,min->

max->

No=min->

strcpy(min->

name,t.name);

min->

No=t.No;

intEditByNo(WORKERBASIC*F1,intn)*按编号查找*

inti,j,k,num,-1;

i++)*排序*

k=i;

for(j=i+1;

n;

if(((F1+k*sizeof(WORKERBASIC))->

No)>

((F1+j*sizeof(WORKERBASIC))->

No))

{

k=j;

}

if(k!

=i)

exchange((F1+i*sizeof(WORKERBASIC)),(F1+k*sizeof(WORKERBASIC)));

*此显示信息只为说明职工已按编号排序,该部分可删除*

age\t\tworker'

%d\t%d\t\t\t%s\n"

(F1+i*sizeof(WORKERBASIC))->

No,(F1+i*sizeof(WORKERBASIC))->

age,

(F1+i*sizeof(WORKERBASIC))->

\nPleaseinputanumberyouwanttosearch:

scanf("

num);

getchar();

low=0;

*折半法*

-1;

while((low<

=notfindtheworker!

else

(F1+mid*sizeof(WORKERBASIC))->

No,(F1+mid*sizeof(WORKERBASIC))->

(F1+mid*sizeof(WORKERBASIC))->

intEditByName(WORKERBASIC*F1,intn)*按姓名查找*

charstr[20];

inti,j,k,flag=0,low,-1;

if(strcmp((F1+k*sizeof(WORKERBASIC))->

name,(F1+j*sizeof(WORKERBASIC))->

name)>

0)

*此显示信息只为说明职工已按名字排序,该部分可删除*

\nPleaseinputaworkeryouwanttoexactlysearch:

str);

*折半法*

No,

age,(F1+mid*sizeof(WORKERBASIC))->

intEditByage(WORKERBASIC*F1,intn)*按年龄查找*

inta,flag=0,i;

\nPleaseinputworker'

age:

a);

if(a==((F1+i*sizeof(WORKERBASIC))->

age))

if(flag==0)

flag=1;

(F1+i*sizeof(WORKERBASIC))->

if(flag==0)

cannotfindtheworker!

intEdit()*查找*

WORKERBASICload,*F1;

intn=0,key=0,i;

if((fp=fopen("

))==NULL)

feof(fp))*统计职工的数量*

load,sizeof(WORKERBASIC),1,fp)==1)

if(n==0)

Noinformationofworker!

F1=(WORKERBASIC*)malloc(n*sizeof(WORKERBASIC));

*按职工的人数申请内存空间*

fp=fopen("

if(fread(F1+i*sizeof(WORKERBASIC),sizeof(WORKERBASIC),1,fp)!

readfailed!

return0;

while(key!

=ESC)

clrscr();

Pleaseselectsearchmethod:

1\t=ByNo.\n"

2\t=ByName.\n"

3\t=Byage.\n"

Esc\t=Exit\n"

Press123orEsc?

key=getch();

switch(key)

case'

1'

:

key=EditByNo(F1,n);

break;

2'

key=EditByName(F1,n);

3'

key=EditByage(F1,n);

free(F1);

intModify()*修改*

WORKER*();

load=(WORKER*)malloc(sizeof(WORKER));

load=(WORKER*)malloc(sizeof(WORKER));

t->

next=load;

if(fread(load,sizeof(WORKERBASIC),1,fp)!

t=load;

t->

next=NULL;

*创建链表完成*

t=();

\nWhichworkerdoyouwanttomodify?

PleaseinputtheNo.age.orname:

num=atoi(str);

*把字符串转换为长整型数*

if((strcmp(t->

workerinfo.name,str)==0)||(num==t->

workerinfo.No)||(num==t->

workerinfo.age))

\nPleaseinputthenewNo."

t->

workerinfo.No);

\nPleaseinputthenewage."

workerinfo.age);

\nPleaseinputthenewname:

t->

workerinfo.name);

ModifyS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1