教师工资管理系统王晋瑞张大漠_第1页
教师工资管理系统王晋瑞张大漠_第2页
教师工资管理系统王晋瑞张大漠_第3页
教师工资管理系统王晋瑞张大漠_第4页
教师工资管理系统王晋瑞张大漠_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中南大学本科生课程设计(实践)任务书、设计报告(C+应用基础课程设计)工资管理系统题 目 学生学号 学生姓名 指导教师院 专业班级 指导老师计算机基础教案实验中心2011年09月08日教师工资管理系统摘要:每个教师的信息为:教师号、姓名、性别、单位名称、 家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电 话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发 工资。注:应发工资 =基本工资 +津贴 +生活补贴;合计扣款 =电话费 +水电费 +房租+所得税 +卫生费 +公积金;实发工资 =应发工资 合 计扣款。具体实现如下功能:A、教师信息处理(1) 输入教师信息(2) 插入(修改

2、)教师信息:(3) 删除教师信息:(4) 浏览教师信息:提示:具体功能及操作参考题 1。B、教师数据处理:(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水 电费、房租、所得税、卫生费、公积金等基本数据。(2) 教师实发工资、应发工资、合计扣款计算。提示:计算规则如题目。(3) 教师数据管理提示:输入教师号,读出并显示该教师信息,输入新数 据,将改后信息写入文件(4) 教师数据查询:提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。(5) 教师综合信息输出提示:输出教师信息到屏幕。1. 教师工资管理系统开发设计思想对于一个管理系统而言,主函数,函数以及成员函数是其重要组成部

3、 分。系统开发设计也是从该三方面入手,下面加以详细阐述。(1) 主函数的设计在做一个系统开发前,一定要明确系统的功能以及功能实现时的输出 (屏幕显示)。编写主函数的主要任务就是确定调用函数以及控制屏幕显 示。确定调用的函数根据要求,该系统至少应该实现五种基本功能:输出工作信息,删除 工资信息,修改工资信息,查找工资信息,列出所有信息。实现以上任何 一种功能都必须要调用一个函数,根据标识符的定义规则,依次命名为 AddNew(),DoDelete(),DoMotify(),DoFind(),List().屏幕显示曲 C: Docuent s and Sett ingsAdinist rat or

4、桌面管理系统l工资管理系统-|”主菜单功能选项晋瑞手打*書3息息息表息出 着信信信列口自T 工工工工工蕈 建扣改除 血逵-ffl-g:g.fi 12345670一个系统要想处理信息,首先必须要输出菜单及提示信息,通过用户 在键盘上的输入来选择某个功能。本系统的屏幕显示如上。为实现该屏幕显示,输出语句完全可以放在main()函数中,但为了使主函数清晰明了,我设计了一个菜单函数Main()供其调用。(2)函数的设计编写函数的目的就是编写一个能实现某种功能的函数供主函数调用。 根据C+面向对象的特点,函数也可以调用类中的成员函数。这样主函 数,函数以及成员函数之间的层次分明,关系就清晰明了,不会有冗

5、长的 感觉。函数设计的主要任务是确定调用的成员函数以及屏幕显示。确定调用的成员函数。不同的函数调用的成员函数是不尽相同的,基本上每个函数都有一个对应的成员函数,例女口 AddNew()与 Addltem(),DoDelete() 与 Removeltem(),DoFind()与 Search () ,DoMotify()与 Replace(),List()与Worker.List()对应,这些成员函数都是共有函数,并且只被其对应函数唯 一调用一次。当然,每个函数不可能只调用一个成员函数,例如AddNew()还调用了另外两个函数In put ()和Actualpay()。屏幕显示 编写函数也需要

6、控制输出以及功能间的转换,从而每一个函数都需要 有一个循环来控制其结束。结束的条件都是“当输入的编号为 0 时结 束”,循环语句有 while也有dowhile,例如DoDelete()和DoFind()用 的是dowhile, AddNew()用到的是 while语句。(3) 成员函数的设计。 成员函数是系统的灵魂,因为所有的处理过程的细节都在成员函数中 完成的。编写成员函数实际上就是一个算法的实现。成员函数的设计包括 两方面内容:成员函数算法的实现和成员函数过程的实现。 成员函数算法的实现工资管理系统不能单凭数组来处理数据,因为企业教师数是不确定的,并且数组在删除和查找某条信息是相当繁琐。

7、所以该系统需要一个全 新的数据处理方式链表。链表是最简单也是最常用的一种动态数据结 构,它是对动态获得的内存进行组织的一种结构。它不需要实现定义固定 的长度,灵活性更强。链表是算法的关键。在添加新的数据时,可以表头插入也可以表尾插 入,这两种插入方法决定了其他成员函数数据的处理。本系统中采取的是 表尾插入的方法。在删除某信息时需要判断数据是在表头,表中还是表 尾,如果删除的是在表中,则需要将删除的前后链表连接起来。总之,本 系统大量运用了链表的 5 种基本操作:建立链表、链表的插入、删除、输 入和查找。 成员函数过程的实现算法确定后还需要控制屏幕显示、条件的判断以及调用其它成员函数。成员函数之

8、间是可以相互调用的,例如成员函数 List() 就调用了成员 函数 ListCount() 来统计当前链表信息的总数,同时还调用了成员函数 Print ()来输出 Worker_pay() 的信息。整个过程中还有一个重要的指 针,Worker_pay *Find(), 它被 Search() , Removeltem()以及 AddItem()所 调用。其次成员函数中大量运用到了程序控制结构。例如, AddItem() 中用if来判断是否是链表的表头,List()中用到了 while语句来实现循环输 出。最后屏幕上则需要显示一些完成了某种功能的标志,例如“成功删除 编号为XX的信息”,“成功修

9、改编号为XX的信息”等。(3) 系统结构框架系统的结构框架主要是系统的流程图以及函数之间的调用关系,该图 能描述系统清晰准确的表现出系统的功能实现。2教师工资管理系统功能及系统能以及其设 计。下面对系统的功能和模块的实现进行简要分析。(1 )输入模块输入模块的功能是创建存储教师工资信息的存储系统以及添加某教师的工 资信息。其中的信息包括教师编号,基本工资,津贴,房租,交通费以及银行 储蓄。为实现输入的功能,有两个方面的任务:定义结构体以及建立链表。 定义结构体结构体的名称为 Worker_pay,其中包含的信息有教师编号(num),基本工资 (payO),津贴(pay1),房租(pay2),交

10、通费(pay3),储蓄(pay4)以及 个人所得税(tax),应扣数(deduct),实发数(actualpay)。定义一个pay的数 组时为了简化变量的定义,使程序更有条理。 建立链表通过从表尾插入的方法来建立链表,首先要先设立一个头指针(head)来存放链表的首地址。然后,不断用new运算符生成一个新的起点,将这个起点链入已有的链表尾部;如果链表中还没有结点,则这个新结点将是首结点,否 则,将新结点的地址赋给原有链表的尾结点的next指针。(2)删除模块删除模块的功能是删除某教师的工资信息。当然,信息包括所有输入的信 息,以及程序内部函数计算的信息例如个人所得税,实发数。从一个链表中删去一

11、个结点,首先从表头开始,找到被删结点后,只要改 变链接关系即可,使被删结点的前去结点的指针域指向被删结点的后继结点。 如果删去的结点是首结点,则将第二个结点的地址作为新的链表的首地址返 回;如果删去的结点是链尾,则将被删结点的前驱作为新的链尾。(3)修改模块修改模块的功能是修改某教师的部分工资信息。要修改某教师的信息首先必须从表头开始搜寻,当找到指定的编号是,重 新对其赋值即可。(4)查找模块查找模块的功能就是输出指定编号教师的工资信息。查找链表中的信息时比较简单的,在上面的模块中也用到了,主要是注意 查找叶必须从表头开始。(5)列表模块列表模块的功能是输出当月全体教师的工资信息。 列表模块就

12、是依次输出链表中各结点的数据。首先要知道链表头结点的地 址,也就是head的值,然后设一个指针变量p,先指向第一个结点,输出p所 指结点的数据与的值,然后使 p 后移一个结点,再输出其数据与的值;依链表 顺序而行,依次输出相应结点数据域的值,直到链表的尾结点。( 5)调试过程中遇到的主要问题及解决办法 设计初期,先完成初步构思,写出主函数。然后对主函数所涉及的各个 模块进行编程,将各个模块利用指针和链表联系起来。在环境中进行调试,应 一边编译,一边调试,并且要一个模块一个模块的调试。直至此模块完全没有 错误时,在进入下一模块的调试。不能直接输入全部的代码一次性调,这样错 误会很多,并且不易找出

13、和修改。在完成程序的编译链接后,要用多组数据进 行审查,确保做到系统无误。设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有 很大的关系。这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检 查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方 便。但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以 应避免用到。程序调试中碰到的错误可以使自己学到知识。养成良好的编程习惯,可以 节省很多时间,避免很多不必要的错误。 在编辑完整个程序后,进行调试阶段总是会数显 head无定义。解决办法:再类的定义是

14、忘记声明指针 Worker_pay *head。3 总结经过一周的C+课程实践,我对 C+语言设计有了一个更深,更全面的了 解,尤其体会到了 C+面向对象操作对简化程序的重要作用。下面是我的几点 体会: 刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手。 这个工资管理系统中教师子信息竟然包含 15 条,以前从来没有遇到过如此多的 变量。和同学讨论很久好,我发现其实可以化繁为简的,信息中 15 条不一定全 都要,因为其中本身就有重复的,例如津贴和补贴。并且可以有一个 pay 的数 组来处理数据。所以做任何事情都必须要开动脑筋,积极思考,有时还要学会 化繁为简。 在编程时条理清晰是至关

15、重要的。主函数,函数,成员函数之间的层次 关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。另外很重 要的一点就是一定要对链表的五种操作熟练的掌握。 在编译,链接,调试的过程中一定要有耐心。因为一个程序中会有很多 小的错误,甚至有的问题要几个小时才能解决。遇到问题,一定要全面分析, 有时候还要向同学请教。总得来说,编程时极需要耐心的。总之,C+课程设计实践为我们提供了一个综合运用所学知识,解决实际 问题的平台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了 我们的自学能力,让我们对 C+有了一个更全面的了解。4输入过程即截图:谤输入第2位职工的信息以职工编号为0结東)晋玉特

16、打: 职工编号:2姓名;2工资月粉:2基本工资,津贴,岗贴,补贴,房贴,交通费:I 房租,储蓄,会费:倫输入笫3位职工的信息以职工编号为0结東)晋瑞手打; 职工号:2姓名| 2工资月份:2基本工资,津贴,岗贴,补贴,房贴,交通费:r房租,储蓄,会费:鷺输入蚤!簪工的信息以职工编号为13结東)晋于持打; 顚工编号:2姓名| 2工资月份;2I 基本工範 律贴,岗贴,补贴,房贴,交通费:r房租,储蓄,会费7保存信息0-退田3醫找要修改的对象晋瑞手扛:1瑕职工錦号查找2瑕姓名査我整修改的陀勢I2我姓名查我备入翳查的姓名 2恂要番改的信息不存在! 是否继续丫是(V)否(N) 在意键返回,昇养盘息出 惰歹

17、信 *息彳 tn 與刀保退5 6 7 0陰输入要捕入的职工信息晋瑞手打:职工輛号I 3 姓名:5 工资月份:8 基本工资,律贴,崗贴*补贴*房贴.交通费;4r馬租,储蓄.会费養功插入,是否继续?是&)否(町 忖意犍返回,并存盘附源代码:/题目:工资管理系统/代码如下:#in elude /标准输入输出头文件#inelude /standard library标准库头文件包含了 C、C+语言的最常用的系统函数该文件包含了的C语言标准库函数的定义#inelude / malloe 的全称是 memory alloeation ,中文叫动态内 存分配#in elude / 字符串处理#in elud

18、e /conio是 Con sole In put/Output(控制台输入输出)的#define TITLE n 数n#define DATA 10s%6.1f%6.1f月份教师编号姓名应发数各种折扣实发简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用 户通过按键盘产生的对应操作,比如geteh()函数等等%2d %4ld %-%6.1fn,p1-mo nth,p1- nu m,p1- n ame,p1-should_pay,p1-rebate,p1-actual_paytypedef struet pay / 结构体声明,pay为绰号 long num。/ 教师编号sh

19、ort mon th 。/ 月份ehar name20 。 /姓名,占长度为20 float jb,ji,gt,bt,ft,jt。 /应发数float should_pay 。float fz,cx,hf,gr 。/ 建立链表float rebate 。 / 各种折扣 float actual_pay 。 / 实发数 struct pay *next 。PAY。FILE *fp 。/ 指针变量指向 FILEPAY *卩仁NULL,*p2=NULL,*head=NUL。/ 初值为空void menu() 。PAY *input() 。void output() 。void save(PAY *h

20、ead) 。PAY *open() 。PAY *insert() 。void search() 。PAY *del() 。PAY *revise() 。/* 主程序模块 */ void main(void) short sel 。do menu() 。 scanf(%d,&sel) 。 / 格式输入函数,读入十进制数switch(sel) case 1: head=input() break 。 case 2: head=insert() break 。 case 3: head=revise() break 。 case 4: head=del() break 。/ 输入模块。 / 插入模块

21、。 / 修改模块/ 删除模块case 5:search() 。/ 查找模块break 。case 6: output() 。 / 输出模块 break 。case 7:save(head) 。 / 保存模块 break 。case 0:break 。 while(sel!=0) 。/* 菜单 */void menu()printf(nnnnnnn)。 / 格式化输出函数 换行printf(tttt *主菜单功能选项 晋瑞手打 *nn) 。 /tab 符printf(tttt1.创建工资档案 n) 。printf(tttt2.添加工资信息 n) 。printf(tttt3.修改工资信息 n) 。

22、printf(tttt4.删除工资信息 n) 。printf(tttt5.查找工资信息 n) 。printf(tttt6.分类信息列表 n) 。printf(tttt7.保 存 信 息 n) 。printf(tttt0.退 出 n) 。printf(nnnnnnnn) 。/* 输入模块 */PAY *input() short n=1 。 p1=(PAY*)malloc(sizeof(PAY) 。if(p1=NULL)printf( 内存不足,无法创建链表! ) 。getch() 。 / 从控制台读取一个字符,但不显示在屏幕上 printf(n 请输入第 %d 位教师的信息(以教师编号为 0

23、结束)晋瑞手打: n,n) 。printf( 教师编号: ) 。 scanf(%d,&p1-num) 。 if(p1-num=0) printf( 按任意键返回! ) 。getch() 。free(p1) 。return 0 。getchar() 。printf( 姓名: ) 。 gets(p1-name) 。printf(工资月份: ) 。scanf(%d,&p1-month) 。printf(基本工资,津贴,岗贴,补贴,房贴,交通费: nscanf(%f,%f,%f,%f,%f,%f,&p1-jb,&p1-ji,&p1-gt,&p1-bt,&p1- ft,&p1-jt) 。printf(

24、房租,储蓄,会费: n) 。 scanf(%f,%f,%f,%f,&p1-fz,&p1-cx,&p1-hf) 。 p1-should_pay=p1-jb+p1-ji+p1-gt+p1-bt+p1-ft+p1-jt if(p1-should_paygr=0 。else if(p1-should_pay=800&p1-should_paygr=(p1-should_pay-800)*5/100 。else if(p1-should_pay=2000&p1-should_paygr=(p1-should_pay-2000)*1/10+60 。else p1-gr=(p1-should_pay-500

25、0)*2/10+60+300 。 p1-rebate=p1-fz+p1-cx+p1-hf+ p1-gr 。 p1-actual_pay=p1-should_pay-p1-rebate 。 while(p1!=NULL)if(n=1)head=p1 。elsep2-next=p1 。n+ 。p2=p1 。 p1=(PAY*)malloc(sizeof(PAY) 。if(p1=NULL)printf( 内存不足,无法创建链表! ) 。getch() 。printf( 请输入第 %d 位教师的信息(以教师编号为 0 结束) n,n) 。)。晋瑞手打:printf( 教师编号: ) 。scanf(%d

26、,&p1-num) 。getchar() 。 if(p1-num=0)p1=NULL 。break 。printf( 姓名: ) 。gets(p1-name) 。printf(工资月份: ) 。scanf(%d,&p1-month) 。n)printf(基本工资,津贴,岗贴,补贴,房贴,交通费:scanf(%f,%f,%f,%f,%f,%f,&p1-jb,&p1-ji,&p1-gt,&p1-bt,&p1- ft,&p1-jt) 。printf( 房租,储蓄,会费: n) 。 scanf(%f,%f,%f,%f,&p1-fz,&p1-cx,&p1-hf) 。 p1-should_pay=p1-j

27、b+p1-ji+p1-gt+p1-bt+p1-ft+p1-jt if(p1-should_paygr=0 。else if(p1-should_pay=800&p1-should_paygr=(p1-should_pay-800)*5/10 。else if(p1-should_pay=2000&p1-should_paygr=(p1-should_pay-2000)*1/10+60 。else p1-gr=(p1-should_pay-5000)*2/10+60+300 。 p1-rebate=p1-fz+p1-cx+p1-hf+p1-gr 。 p1-actual_pay=p1-should

28、_pay-p1-rebate 。 p2-next=NULL 。printf(教师信息已输入,请按任意键返回,并存盘)ogetch() 。return head o/* 输出模块 */void output()short sel,flag,month ofloat min,max ododoprintf(nn 请选择您的列表方式 晋瑞手打: n) 。 printf(tt1.全部清单 n)。printf(tt2.按月输出 n)。printf(tt3.按工资段输出n) 。printf(tt0.返回 n) 。scanf(%d,&sel) 。while(sel!=1&sel!=2&sel!=3&sel!

29、=0) 。head=open() 。if(head=NULL) return 。elseswitch(sel)case 1:printf(nttt * 全部清单 *n) 。 printf(TITLE) 。p1=head 。doprintf(DATA) 。p1=p1-next 。while(p1!=NULL) 。break 。case 2:flag=0 。printf( 输入要查的月份 晋瑞手打: ) 。 scanf(%d,&month) 。printf(nttt*第4月工资清单 *n,month) 。printf(TITLE) 。p1=head 。doif(p1-month=month)pri

30、ntf(DATA) 。p1=p1-next 。flag=1 。elsep1=p1-next 。while(p1!=NULL) 。if(flag=0)printf( 没有该月清单 n) 。break 。case 3:flag=0 。printf( 输入最低工资: ) 。 scanf(%f,&min) 。printf( 输入最高工资: ) 。 scanf(%f,&max) 。printf(ntt *%5.1f到 %5.1f 工资的名单 *n,min,max) 。printf(TITLE) 。p1=head 。do if(p1-actual_paymin&p1-actual_paynext 。fla

31、g=1 。else p1=p1-next 。while(p1!=NULL) 。if(flag=0)printf( 没有该工资段的教师 n) 。break 。case 0:break 。while(sel!=0) 。/* 保存文件 */void save(PAY *head) short write 。fp=fopen(pay.txt,w) 。if(fp=NULL)printf( 创建文件失败! ) 。getch() 。return 。 p1=p2=head 。while(p1!=NULL)write=fwrite(p1,sizeof(PAY),1,fp) 。 if(!write)printf(

32、 无法写入文件! ) 。getch() 。return 。p1=p1-next 。fclose(fp) 。printf( 成功存盘!晋瑞手打 ) 。getch() 。/* 打开文件 */PAY *open()short n=1,read 。fp=fopen(pay.txt,r) 。 if(fp=NULL)printf( 无法打开档案文件!晋瑞手打 ) 。 getch() 。return NULL 。if(p1=p2=(PAY*)malloc(sizeof(PAY)=NULL)printf( 内存不足! ) 。getch() 。return NULL 。read=fread(p1,sizeof(

33、PAY),1,fp) 。 if(!read)printf( 文件读取出错! 1) 。getch() 。return NULL 。if(p1-next=NULL)head=p1 。elsedoif(n=1) head=p1 。 else p2-next=p1 。 n+ 。 p2=p1 。 if(p1=(PAY*)malloc(sizeof(PAY)=NULL) printf( 内存不足! ) 。 getch() 。 return NULL 。 read=fread(p1,sizeof(PAY),1,fp) 。 if(!read) printf( 文件读取出错! 2) 。 getch() 。ret

34、urn NULL 。 while(p1-next!=NULL) 。 p2-next=p1 。 return head 。 fclose(fp) 。/* 插入模块 */ PAY *insert() n)PAY *p3=NULL。 char sel 。 head=open() 。 if(head=NULL) return NULL 。 else do printf( 请输入要插入的教师信息晋瑞手打: p3=(PAY*)malloc(sizeof(PAY) 。 if(p3=NULL)printf( 内存不足,无法创建链表! ) 。 getch() 。printf( 教师编号: ) 。scanf(%d

35、,&p3-num) 。getchar() 。printf( 姓名: ) 。gets(p3-name) 。printf(工资月份: ) 。scanf(%d,&p3-month) 。n)printf(基本工资,津贴,岗贴,补贴,房贴,交通费:scanf(%f,%f,%f,%f,%f,%f,&p3-jb,&p3-ji,&p3-gt,&p3-bt,&p3- ft,&p3-jt) 。printf( 房租,储蓄,会费: n) 。scanf(%f,%f,%f,%f,&p3-fz,&p3-cx,&p3-hf) 。 p3-should_pay=p3-jb+p3-ji+p3-gt+p3-bt+p3-ft+p3-j

36、t if(p3-should_paygr=0 。else if(p3-should_pay=800&p3-should_paygr=(p3-should_pay-800)*5/100 。else if(p3-should_pay=2000&p3-should_paygr=(p3-should_pay-2000)*1/10+60 。elsep1-gr=(p3-should_pay-5000)*2/10+60+300 。p3-rebate=p3-fz+p3-cx+p3-hf+ p1-gr 。p3-actual_pay=p3-should_pay-p3-rebate 。p1=head 。while(

37、p1!=NULL)p2=p1 。p1=p1-next 。p2-next=p3 。p3-next=NULL 。printf( 成功插入,是否继续?是( Y) 否( N)n) 。sel=getch() 。while(sel=Y|sel=y) 。printf(n任意键返回,并存盘n)。getch() 。return head 。/* 查找模块 */ void search() short sel 。 long num 。 char name20,choose 。 head=open() 。 if(head=NULL) return 。 else dodoprintf(n选择查找方式晋瑞手打: n)

38、。printf(tt1. 按教师编号查找 n) 。printf(tt2. 按姓名查找 n) 。 scanf(%d,&sel) 。getchar() 。while(sel!=1&sel!=2) 。switch(sel)case 1:printf( 输入要查的教师编号: ) 。scanf(%ld,&num) 。break 。case 2:printf( 输入要查的姓名: ) 。gets(name) 。break 。 p1=head 。while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) /用成p1!=NULL有问题?p1=p1-n

39、ext 。if(p1-num=num)|strcmp(p1-name,name)=0)printf( 您要查找的信息如下: n) 。printf(TITLE) 。printf(DATA) 。elseprintf( 没有该信息! n) 。printf( 是否继续?是( Y) 否( N)n) 。 choose=getch() 。while(choose=Y|choose=y) 。printf( 任意键返回 ) 。 getch() 。/* 删除模块 */PAY *del()short sel 。long num 。char name20,choose 。 head=open() 。 if(head=

40、NULL) return NULL 。else do do printf(n 选择删除方式: n) 。 printf(tt1.按教师编号删除 n) 。printf(tt2.按姓名删除 n) 。scanf(%d,&sel) 。 getchar() 。while(sel!=1&sel!=2) 。 switch(sel)case 1:printf( 输入要删除的教师编号晋瑞手打: ) 。 scanf(%ld,&num) 。break 。case 2:printf( 输入要删除的姓名: ) 。 gets(name) 。break 。 p1=head 。if(p1-num=num)|strcmp(p1-name,name)=0) head=p1-next 。 printf( 删除信息成功! ) 。 else while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) p2=p1 。 p1=p1-next 。 if(p1-num=num)|strcmp(p1-name,name)=0) p2-next=p1-next 。 free(p1) 。printf(n 删除信息成功! n) 。 elseprintf(n 没有该信息! n) 。printf( 是否继续?是( Y) 否( N)n) 。 choose=getch() 。wh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论