精华内容
下载资源
问答
  • 打印机 第一个文档的状态为:正在删除正在打印,怎么也删除不了 解决方案: 方法1: 1、打印机长时间工作,导致出现问题。单击“开始”-“运行”,打入services.msc ,在服务列表中,找到“Print Spooler”服务把它...

    打印机 第一个文档的状态为:正在删除正在打印,怎么也删除不了
    解决方案:
    方法1:
    1、打印机长时间工作,导致出现问题。单击“开始”-“运行”,打入services.msc ,在服务列表中,找到“Print Spooler”服务把它停止再启动即可。

    方法2:
    1、打印机长时间工作,导致出现问题。单击“开始”-“运行”,打入services.msc ,在服务列表中,找到“Print Spooler”服务把它停止
    2、点击“开始”-“运行”,输入spool,找到文件夹下面“PRINTERS”文件夹,把里面的文件全部删除(里面就是你打印资料的缓存文件);
    3、最后点击“开始”-“运行”,输入 services.msc ,打开服务列表,找到“Print Spooler”服务把它重新启动,这样就删除了原任务。关闭打印机电源,过一会重新打开。当前任务就被取消了,可以重新打印任务。

    展开全文
  • 一个朋友经常遇到打印文件时,打印出错...因为他打印资料非常多,所以每次都需要重复上面的操作,觉得非常麻烦,没有办法只好找我解决问题。下面是我帮他花了5分钟时间写的一个批处理:Echo offEcho 停止打印服务net s

    一个朋友经常遇到打印文件时,打印出错后,每次都需要先停止打印服务(Print Spooler)后,才能删除打印任务,然后再启动打印服务。这样才能继续打印,否则,即使打印机重启,计算机重启都没办法删除。

    因为他打印的资料非常多,所以每次都需要重复上面的操作,觉得非常麻烦,没有办法只好找我解决问题。

    下面是我帮他花了5分钟时间写的一个批处理:


    Echo off
    Echo 停止打印服务
    net stop "print spooler"
    Echo 
    Echo 删除文件

    del C:/WINDOWS/system32/spool/PRINTERS/*.*  /q

    Echo 
    Echo 启动服务
    net start "print spooler"

    Echo 完成
    pause


    展开全文
  • 打印网页去掉相关信息

    千次阅读 2019-03-16 09:20:25
    在网页上的资料,想打印下来,但是打印的时候,旁边的导航栏很杂,这里是一些可能的方法 1.全屏显示然后打印 之前csdn上面的内容是可以全屏显示,然后打印出来的是没有侧边栏的 2,将网页保存为html文档, 然后用...

    前言:
    在网页上的资料,想打印下来,但是打印的时候,旁边的导航栏很杂,这里是一些可能的方法

    1.全屏显示然后打印
    之前csdn上面的内容是可以全屏显示,然后打印出来的是没有侧边栏的

    2,将网页保存为html文档,
    然后用word打开,一般这样就够了

    在这里插入图片描述
    3. 将网页保存为html文档,然后用记事本打开,删除源码里面的一些元素,还可以直接在浏览器中操作,然后直接使用浏览器的打印操作即可,也可以先保存在再打印
    在这里插入图片描述
    打印之后的结果
    在这里插入图片描述

    4.最后一个神器(from mpf)
    http://ksria.com/simpread/#downloads

    展开全文
  • 插入、删除方便,存取速度快,不需要索引区,节省存储空间。其缺点是:能进行顺序存储,只能按关键字随机存取,且询问方式限于简单询问,并且在经过多次的插入、删除之后,也可能造成文件结构合理,即溢出桶满而...

     

     

     

     

     

     

    青岛大学软件技术学院

     

     

     

    课 程 设 计

     

     

     

     

    题目名称      散列文件(C语言版)    

     

     

     

     

                  hzdiy           

                         

                 

    指导教师                    

     

     

     

    2008   1    14 

     

     

     课程设计任务书

    . 课程设计的目的与要求

    课程设计是软件设计和编程的强化训练。在此期间要用C语言结合数据结构作综合练习,目的是让同学们通过本课程设计熟悉数据结构中的程序设计思想,深刻体会算法设计的全过程,编写出高效率的应用程序,培养掌握抽象的数据结构设计能力,提高软件设计的能力,从而为今后进行系统软件和应用软件的开发打下坚实的基础。学生通过自己搜集资料、讨论及老师的指导,完成自己课题的设计和软件系统的实现。

    . 课程设计的内容

    1、 对数据结构课题进行分析,提出解决方案和设计算法;

    2、 根据算法思想,在C语言环境中进行调试运行;

    3、 经受操作运行正确性的检查。

    . 进度安排

    根据教学计划安排2周,具体如下:

    1、 布置任务、进行分组、确定并熟悉课题 1天;

    2、 全面熟悉各项设计任务,查阅相关资料,功能分析与概要设计 2天;

    3、 完成详细设计,编写代码,整理设计报告 7天;

    4、 测试设计内容,并经受检查,上交源代码及设计报告 3天;

    . 课程设计质量标准

    须有规范的设计报告和在规定条件下运行的软件程序。

    设计报告的要求如下:

    1、对数据结构课题进行功能需求分析

    2、设计合理的数据结构和系统框架

    3、编程步骤和实现调用方法鲜明,程序功能齐全,能正确运行。有系统结构及算法设计,包括总体框架、函数定义和参数定义。

    4、说明书、系统动态流程图要清楚

    5、有测试项目、测试数据、结果、分析

    6、课题完成后必须按要求提交课程设计报告

    散列文件

          

    …………………………………………………………………..…..4

    第一章  …………………………………………………….…..… 5

    1.1系统开发的必要性………………………………………..….…5

            1.2系统功能……………………………………………...…… 5

            1.3开发系统的意义. …………..…. ………………..……… ..…5

    第二章 系统平台简述…………………………………………………5

    2.1C 语言概述……………..…… ..…..…. ……. ....……...…… 5

      2.1.1 C 语言定义..........................................………...............…5

       2.1.2 C 语言优点.......................................………...............…...6

    2.1.3 C 语言缺点...................................... ………...............…..6

    2.2 使用VC++的优点…………………………………...………….6

    第三章 系统分析和总体设计.....................................................…… ..…7

    3.1基本简介…………………………………………………………7

    3.3系统框架…………………………………………….....………...7

            3.4算法与数据结构设计……………………………………….……………8

    第四章 模块详细设计……..…………..……………..…………..……..….…..………8

    4.1判断散列文件是否存在……..…………..………………..…………..…9

    4.2初始化散列文件……...…………..…………..………………..……..…10

    4.3向散列文件中插入一个元素……..…………..……………..…..……11

    4.4打印散列文件……..…………..……………..…………….…….………13

    4.5系统主函数……..…………..……………..………..………….…………13

    4.6运行结果……..…………..……………..………..……………………..…15

    第五章 系统的测试、维护和改进……………..……...……………….…..……18

    5.1系统测试......................................................... …………..........18

    5.2系统测试评价.......................................................... ……..............19

    5.3改进.............................................................…......... ……..............19

    总结……………..……... …………..…… ..…..…………..………... …………………….19

    致谢……………..……... …………..…… ..…..……………..………... ………………….20

    参考文献...……..……... …………..…… ..…..………………..……... …………………20

     

     

     


     

    直接存取文件指的是利用杂凑(Hash)法进行组织的文件。它类似于哈希表,即根据文件中关键字的特点设计一种哈希函数和处理冲突的方法将记录散列到存储设备上,故又称散列文件。

    于哈希表不同的是,对于文件来说,磁盘上的文件记录通常是成组存放的。若干个记录组成一个存储单位,在散列文件中,这个存储单位叫做桶。假若一个桶能存放m个记录,这就是说,m个同义词的记录可以存放在同一地址的桶中,而当第m+1个同义词出现时才发生“溢出”。处理溢出可以采用哈希表中处理冲突的方法,但对散列文件,主要采用链地址法。

    总之,散列文件的有点是:文件随机存放,记录不需要进行排序;插入、删除方便,存取速度快,不需要索引区,节省存储空间。其缺点是:不能进行顺序存储,只能按关键字随机存取,且询问方式限于简单询问,并且在经过多次的插入、删除之后,也可能造成文件结构不合理,即溢出桶满而基桶内多数为被删除的记录。此时亦需要重组文件。

    散列存储方法不仅适用于内存,也同样适用与外存,即文件也可以采用散列方式存储,以散列方式存储的文件成为散列文件。散列文件通常采用链接法法处理冲突,把保存每个单链表表头的数据放在散列文件的头部,把所有单链表中的结点接在表头数据的后边。

    散列文件运用拉链法解决冲突:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于 1,但一般均取α≤1

    散列文件的操作主要包括初始化散列文件,向散列文件中插入一个元素,从散列文件中删除一个元素,从散列文件中查找一个元素,和打印散列文件。为了实现以上几个功能,需要结合数据结构算法,运用散列算法(哈希算法),实现一个散列文件的简单操作。

         


     

    第一章  

    本程序研究散列文件操作的问题。对于散列文件的处理主要运用链接法处理冲突。

    1.1系统开发的必要性

    散列方法不同于顺序查找、二分查找、二叉排序树及B-树上的查找。它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O(1)。散列文件的基本操作,为更好的研究散列文件存储提供案例支持。

    1.2 系统功能

    国家正大量需求技能类的软件人才,我作为一个计算机应用的专科生,希望可以理论联系实际,并且增强自己的就业能力。编制出一个实用的程序模型来深化对课程学习内容的理解。归纳起来,功能主要是实现散列文件的初始化、插入、删除、查询。

    1.3开发系统的意义

    散列文件的操作主要研究的是处理冲突的一种方法,处理冲突的方法的好坏直接影响数据存储的效率,如今处理冲突的一般方法有:开放定址法和拉链法。在此运用的是拉链法处理冲突。拉链法的优点有:(1)拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;(2)由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;(3)开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间。但也有缺点:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间用来扩大散列表的规模,可使装填因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度。开发此系统会可以让研究者清楚的了解散列文件处理冲突的方法,增加学习的兴趣。

    第二章             系统平台简述 

    2.1 C语言概述

    2.1.1 C语言定义  

    C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。

    C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

    C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维二维图形和动画。它是数值计算的高级语言。

    2.1.1 C语言优点

    1. 简洁紧凑、灵活方便

    C语言一共只有32关键字,9控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对字节地址进行操作, 而这三者是计算机最基本的工作单元。

    2. 运算符丰富

    C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

    3. 数据结构丰富

    C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

    4. C是结构式语言

    结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

    5. C语法限制不太严格,程序设计自由度大

    虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。

    2.1.3 C语言的缺点

    1. C语言的缺点主要是表现在数据的封装性上,这一点使得C在数据的安全性上做的有很大缺陷,这也是CC++的一大区别。

    2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

    3.[C语言指针]

    指针就是C语言的一大特色,可以说C语言优于其它高级语言的一个重要原因就是因为它有指针操作可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性。

    2.2 使用vc++的优点

           VC++微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,Vc++Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFCATLCOM等的知识,难度比较大。

    第三章      系统分析和总体设计

    基本简介

        本程序做的是散列文件的操作,实现对散列文件进行初始化、插入、删除、查找等基本操作。

    3.2系统框架

    (1)系统应该具备的基本功能
    初始化散列文件、向散列文件中插入一个元素、从散列文件中删除一个记录、从散列文件中查找一个记录。
    (2)系统的总体结构图 
    散列文件包括五大部分:判断散列是否存在、初始化散列文件、向散列文件插入一个元素、从散列文件中删除一个元素、从散列文件中查找一个元素。系统的总体结构图如下图3.1所示:
           
     
      
      
       
       文本框: 初始化散列文件
       
       
       
       文本框: 向散列文件中插入一个元素
       
       
       
       文本框: 从散列文件中删除一个元素
       
       
       
       文本框: 从散列文件中查找一个元素
       
       
       
       文本框: 判断散列文件是否存在
       
       
      
            
                            3.1:散列文件结构图   

    3.3模块设计

    散列文件操作主要实现的是散列文件的初始化、插入、删除、查找和判断散列文件是否存在。其每一个功能可以写在一个函数中,作为一个模块进行实现。

    3.3.1判断散列文件是否存在
    在散列文件存在的默认路径查找散列文件,若存在则不采取任何操作;若不存在,则提示用在默认路径新建一个散列文件,或在其他位置查找散列文件。
    3.3.2初始化散列文件
    初始化散列文件,首先以新建二进制文件方式新建一个二进制文件,然后动态分配一个具有N+1个整数元素(N为散列表长度)的数组空间A,然后把A中的每个元素均置为-1,表示空指针,最后把数组内容写入散列文件即可。
    3.3.3向散列文件中插入一个元素
    向散列文件中插入一个元素x时,首先根据元素的关键字x.key、散列表长度N和做选择的任一散列函数计算出散列地址d,接着为x生成一个内存结点,并使该结点的next域为散列表文件中下标为d的元素值(即表头指针),然后把该内存结点的值写入到散列文件数据域的空闲结点中,若不存在经删除回收的空闲结点则写入到该文件的末尾,最后把该节点在散列中的的位置序号赋给散列文件表头中下标为d的元素中,使得新插入的结点被链接到散列地址(即下标)为d的单链表的表头。
    3.3.4从散列文件中删除一个元素
    从散列文件中删除一个关键字为x.key的元素时,首先是计算出散列地址d,接着从散列文件表头中下标为d的位置取出对应的单链表的表头指针,然后遍历该单链表,从中查找出关键字为x.key的结点,并从单链表中删除该结点,其元素值x带回,最后把被删除的结点链接到空闲结点表的表头。假定空闲结点的表头指针保存在散列表文件中下标为m的位置,若该位置为-1,则表明散列文件中不存在空闲结点。
    3.3.5从散列文件中查找一个元素
    从散列文件中查找一个关键字为x.key的元素时,同样是首先计算出散列地址d,接着从散列文件中下标为d的位置取出对应单链表的表头指针,然后从单链表中顺序查找出对应的元素并带回。
    3.3.6打印散列文件
    首先从散列文件表头中散列地址为0的位置取出对应的单链表的表头指针,然后顺序的打印出这以单链表的所有元素的关键字,打印完此单链表,然后把散列地址加1,取出下一个单链表的表头指针,以此方法打印所有元素。

    第四章       模块详细设计

    散列文件的操作包括:判断散列文件的存在和散列文件的插入、删除、查找、打印。下面进行详细的介绍:

    4.1判断散列文件是否存在

    本结构首先是判断散列文件是否存在,存在则不进行任何处理并关闭文件,相关的代码如下:

        FILE *fp; 

        fp = fopen(fname, "rb");

        if(NULL == fp)

        {

            //当文件不存在时,进行新建文件或打开其他位置的代码

        }

        else

        {

           fclose(fp);   //文件存在,不对文件进行任何处理,并关闭文件

        }

    上面的代码,用FILE *fp申请一个指向散列文件的指针,接着用fp = fopen(fname, "rb")打开散列文件,并把指针赋予fp,然后判断文件指针是否为空,为空,则提示新建文件或打开其他路径上的文件。若存在,不对文件进行任何处理,直接关闭文件。

    当散列文件不存在时,新建散列文,或打开其他位置的散列文件,打开其他位置的散列文件需要输入文件的路径,相关的代码如下:

    printf("--- 散列文件不存在,

    是否新建散列文件(y:从新建立/n:打开其他散列文件)? ---/n");

           scanf("%c", &bcreate);

           if('y' == bcreate || 'Y' == bcreate)      //当输入y时,新建散列文件

           {

               InitHashFile(fname);     //调用初始化散列文件的函数进行新建

               printf("--- 新建散列文件完毕! ---/n");

            }

           Else       //当输入n时,要求用户输入散列文件的存储路径,

           {

               printf("请输入散列文件路径:/n");

               scanf("%s", filename);

               strcpy(fname, filename);    //储存散列文件路径

               existHash(fname);    //递归调用自身,确认散列文件存在

           }

        上面用代码用scanf("%c", &bcreate)读取用户的选择是否新建散列文件,并赋予变量bcreate中。代码if('y' == bcreate || 'Y' == bcreate)判断变量值是否为Y/y,是则调用InitHashFile(fname)新建并初始化散列文件;否则要求用户输入文件路径,代码为scanf("%s", filename),然后用existHash(fname)递归调用自身,确认散列文件存在。

    4.2初始化散列文件

       本结构是以读写方式新建一个二进制散列文件,相关代码如下:

           FILE *fp;

    fp = fopen(fname, "wb+");      //以读写方式新建二进制散列文件

           if(NULL == fp)

           {

                  printf("Cannot open this file!/n");

                  exit(1);

           }

           上面代码用FILE *fp,声明一个文件指针,fp = fopen(fname, "wb+")以读写方式打开散列文件,if(NULL == fp)判断散列文件是否为空。

           然后在动态申请N+1个整型存储空间的数组A,并对此数组使用循环进行初始化为-1,并把数组A写入散列文件中,最后删除数组A动态申请的内存空间,相关代码如下:

           A = (int *)calloc(N + 1, b1); //动态分配具有N+1个整型储存空间的数组A

           if(NULL == A)

           {

                  printf("Memory alloction failare!/n");

                  exit(1);

           }

           //给数组A中的每个元素赋初值-1,表示空指针

           for(i = 0; i < N + 1; i++)

           {

                  A[i] = -1;

           }

           //初始化散列文件

           fwrite((char *)A, (N + 1)*b1, 1, fp);

           //删除数组A

           free(A);

           上面代码A = (int *)calloc(N + 1, b1)动态申请具有N+1个整型储存空间的动态数组A, if(NULL == A)判断A数组申请是否成功,不成功,则提示内存申请失败。使用for(i = 0; i < N + 1; i++){A[i] = -1;}来初始化数组A,把A数组的所有元素都赋值为-1。用fwrite((char *)A, (N + 1)*b1, 1, fp)把初始化后的数组A写入散列文件中。最后用free(A)删除数组A动态申请的内存空间。

    4.3向散列文件中插入一个元素

       本结构的实现散列文件的插入,首先要以读写方式打开散列文件,相关代码如下:

           //将散列文件的表头读入到数组A

           fread((char *)A, (N + 1) * b1, 1, fp);

           上面的代码是从散列文件中读取长度为(N+1)*b1长度字符,并赋予数组A中。

           接着以关键字x.key计算x的散列地址,采用除留余数法,并以xA[d]的值构成待插入散列文件的内存节点temp,代码如下:

    d = x.key % N;    //以关键字x.key计算x的散列地址,采用除留余数法

    //xA[d]的值构成待插入散列文件的内存节点temp     

    temp.data = x;     //把数值赋予结点temp的数据域data

    temp.next = A[d];      //A[d]中的链表指针赋予temp结点的next

    在接着就是确定待插入的内存结点插入到散列文件中的位置,当A[N]==-1时表明散列文件中无空闲结点,则将temp结点插入到文件的尾部,即将文件指针移到文件的尾部,再计算出此结点的位置序号len,把结点写入散列文件,并把结点序号赋值给散列地址A[d]中,相关代码如下:

                  //将文件指针移至文件尾

                  fseek(fp, 0L, 2);

                  //计算出文件尾的结点位置序号

                  len = (ftell(fp) - (N+1)*b1)/b2;

                  //temp结点的值写入文件尾

                  fwrite((char *)&temp, b2, 1, fp);

                  //使A[d]指向新插入的结点

                  A[d] = len;

    上面代码,fseek(fp, 0L, 2)将文件指针移动到文件的头部,len = (ftell(fp) - (N+1)*b1)/b2计算待插入结点的位置序号,fwrite((char *)&temp, b2, 1, fp)temp结点插入到文件尾,再把位置序号赋予表头域A[d]中。

    若存在空闲结点, 把空闲结点指向的结点位置序号赋值给p,然后将文件指针指向空闲结点的位置,读取空闲结点的指针域,并赋值给A[N],再把文件指针向前移动一个b2长度,把temp结点写入空闲结点,并把p值再赋值给A[d]中,相关代码如下:

                  p = A[N]; //p指向空闲单链表的表头结点

                  //使空闲单链表的表头指针指向其下一个结点

                  fseek(fp, b1 * (N+1) + p*b2, 0);

                  fread((char *)&pn, b2, 1, fp);

                  A[N] = pn.next;

                  //使temp的值写入到p位置的结点上

                  fseek(fp, -b2, 1);

                  fwrite((char *)&temp, b2, 1, fp);

                  //使A[p]指向新插入的p结点

                  A[d] = p;

           上面代码,p = A[N]将空闲节点的表头指针赋予pfseek(fp, b1 * (N+1) + p*b2, 0)将文件指针移动到p所指的位置,fread((char *)&pn, b2, 1, fp)读取一个结点的内容,A[N] = pn.next把读取的空闲结点的指针域赋予A[N]中,fseek(fp, -b2, 1)向前移动b2长度的位置,fwrite((char *)&temp, b2, 1, fp)写入temp结点的内容,最后再A[d] = p使A[p]指向新插入的p结点。

           最后将数组A中的全部内容重新写回到散列文件的表头中,即把文件指针移到文件头部,再写入数组A,然后删除动态数组A申请的内存空间,并关闭文件,相关代码如下:

           fseek(fp,0L,0); //将数组A中的全部内容写回到散列文件的表头中

           fwrite((char *)A, b1 * (N+1), 1, fp);

           //删除动态数组A和关闭散列文件

           free(A);

           fclose(fp);

           上面代码,fseek(fp,0L,0)将文件指针移动到文件的头部,fwrite((char *)A, b1 * (N+1), 1, fp)把修改后的表头数组A重新写入散列文件的表头中。free(A)删除动态申请的数组Afclose(fp)关闭散列文件。

    4.4打印散列文件

    本结构的功能是按散列地址顺序的打印每一个单链表的关键字。首先打开散列文件,打开的方法前面已经叙述,在次不再赘述;然后再申请动态数组A,并把散列文件表头读入数组A中,方法前面也已经叙述,不再赘述。然后开始提取第一个散列地址的指针通过此指针指向的单链表顺序的打印每一个结点的关键字,相关代码如下:

           for(i = 0; i < N+1; i++)      //改变散列地址

           {

                  printf("%d:", i);

                  p = A[i];

                  while(-1 != p)             //打印单链表

                  {

                         fseek(fp, (N+1)*b1 + p*b2, 0);

                         fread((char *)&pn, b2, 1, fp);

                         printf("%d->%d  ", p, pn.data.key);    //打印结点关键字

                         p = pn.next;  //移到下一个结点指针

                  }

                  printf("/n");

           }

           上面代码,for(i = 0; i < N+1; i++)改变散列地址,以便输出每个散列地址指向的单链表,printf("%d:", i)输出散列地址号,有0开始到1313指向空闲结点。p = A[i]把散列地址指向的指针赋予pwhile(-1 != p)判断指针是否为空,为空则说明此单链表打印完毕,fseek(fp, (N+1)*b1 + p*b2, 0)将文件指针指向要打印的结点位置,fread((char *)&pn, b2, 1, fp)读取结点信息,printf("%d->%d  ", p, pn.data.key)输出结点位置序号和关键字值。p = pn.nextp指针移到下一个结点。

    4.7系统主函数

    本结构是本系统开始运行处,在此实现函数的调用,算法的实现并且打印输出结果。此函数首先调用existHash(filename)函数检测散列文件是否存在,然后运用while循环实现对散列文件的循环操作,相关代码如下:

       while(1)

       {

    printf("/03------------ 散列文件 -------------/03/n");     

          //打印菜单

           printf("/03 请输入你的选择(1-5):");

           scanf("%d", &number);

           switch(number)

           {}    //switch分支,根据选择不同执行不同操作。

    }

        上面代码,while(1)是一个死循环,实现用户的循环操作。scanf("%d", &number)获取用户选择的操作编号,switch(number)判断用户选择的操作号,并执行相应的操作

    当用户输入选择序号后,通过switch分支结构进行执行不同的操作,如:选择1,即初始化散列文件,则执行case 1分支,实现初始化散列文件的目的。相关代码如下:

    switch(number)

                  {

                         case 0:

                                return;

                         case 1:

                                …..//初始化散列文件

                         case 2:

                                …….//向散列文件中插入一个元素

                         case 3:

                                …….//从散列文件中删除一个元素

                         case 4:

                                …..//从散列文件中查找一个元素

                         case 5:

                                …….//打印散列文件

                         default:

                                printf("/n--- 输入功能号表错误 ---/n");

                                break;

                  }     //switch结束

    上面代码,通过不同number值进入不同的case块,实现不同的操作。

    4.8运行结果

    初次运行程序,没有“hash”文件,程序调用函数existHash()判断散列文件是否存在,当不存在时,提示用户新建一个散列件,如图4.1

    4.1

    输入y,则新建一个“hash”文件,如图4.2

    4.2

    输入n,提示打开输入要打开的文件路径,例如:C:/hash。如图4.3

    4.3

    接下来进行对散列文件进行处理,首先我们初始化一下散列文件,如图4.4

    4.4

    然后向散列文件中插入三个元素,如:25 hello22 goodbye8 letsgo,,插入元素通过调用插入函数HFInsertOne()把关键字和字符数组插入散列文件。如图4.5

    4.5

    再从散列文件中删除关键字为22的元素,程序调用函数HFDelete()删除关键字为22的元素,并把元素的数据值返回显示出来。如图4.6

    4.6

    再从散列文件中查找关键字为25的元素,程序调用函数HFSearch()查找关键字为25的元素,查到则返回元素值,查找不到,则提示“查找失败!”。如图4.7

    4.7

           最后打印散列文件,调用函数HFPrint()打印元素列表。如图4.8

    4.8

    第五章                        系统的测试、维护和改进

    5.1系统测试

    打开其他位置的散列文件的测试如下所示

    (1)当用户输入文件路径打开其他位置的散列文件,但路径输入错误。

    (2)解决方法:通过递归调用,允许其重新输入,直至输入正确的路径。

    5.2系统测试评价

    在测试过程中,发现了很多的不当之处,也出现了很多错误,并且对错误进行更改。通过多系统的测试,证实了此系统可以正常的运行,较好地达到了预期的结果。

    5.3改进

    由于时间仓促,尚有很多需要改进的地方那个。针对本程序,散列文件的数据域仅能存10个字符,不能处理实际问题,在此仅仅是做测试,在实际应用中,可以把数据域中添加上实际的数据类型。

    在打印散列文件时仅仅打印了关键字,可以改善把数据域也打印出来,并且可以把打印的结果储存在一个文本文件中。即可打开文本文件查看散列文件中的内容了。

    总结  

    这次设计中遇到了很多专业问题,例如:如算法调用失败,预处理头文件错误,变量定义漏掉,声明语法错误等方面的一些问题,李老师的悉心指导和同学的热心帮助才使我顺利的完成了这次课程设计。为了解决问题查找了大量的资料参考,并及时的向老师进行请教,与同学探讨使我深入的了解。经过课程设计学习我学到了很多:为人做事要有严谨、不耻下问的态度和不屈不挠的精神。

    然而这个程序仅仅是个小小的测试,它还有很多需要改进的地方。我通过这次实训了解到作为一名软件工程师,应该具有严密谨慎,吃苦耐劳,不畏艰难险阻的精神,最重要的要有创新精神,学会学习的方法,多向周围同学请教,快速高效地完成题目。在本程序的开发过程中,由于时间的仓促和知识经验有限,做的程序不是太完整,有一些地方或许有些缺陷有待于进一步的完善,并且可能不能完全满足用户的需求。

     

     


     

    致谢

    论文完成的前提是李晓娜老师给予我细心的关怀与指导,在这里表示衷心的感谢。李老师认真负责的工作态度、严谨的治学风格,使我深受启发,她的精心指导和教诲使我受益匪浅.老师让我了解到了,作为将来的编程师所应具备的优良品质。为将来的生活和就业打下坚实的基础。

    另外,在系统开发过程中,同学同样也给与我不少帮助,使得系统能及时开发完成,这里一并表示感谢。

    在论文即将完成之际,回顾紧张但又充实的学习和开发过程,本人在此向所有关心我的老师以及帮助我的同学们致以最真诚的感谢。

    千言万语道不尽我对你们的感谢,我会倍加努力,用成绩来报答你们的。

    在这里我由衷的感谢母校---青岛大学为我们提供了这机会.还要感谢指导老师对我们的辛勤指导和同学无私的帮助!

     

    参考文献

     

    [1] 林琪.C语言算法-图算法》.清华大学出版社.2003.5

    [2] 董杨琴.《程序设计基础-C语言与数据结构》.中国电力出版社.2002.6

    [3].蒋文蓉.《数据结构》.高等教育出版社.2005.1

    [4] 钱丽萍.C语言数据结构与程序设计》.清华大学出版社.2003.1

    [5] 谭浩强.C 语言程序设计》.清华大学出版社.

    [6] 许孝凯.《数据结构课程设计》.清华大学出版社

    [7] 严蔚敏.《数据结构(C语言版)》.清华大学出版社

     

     

     

     

     

     评语:

     

     

     

     

     

     

     成绩:         指导教师                

     

     

     

     

     

     

                       签章                

    备 注

     

     

    展开全文
  • 脚本打印

    千次阅读 2007-10-12 00:19:00
    11.1 Web打印Web打印是一种常用的打印方式,其使用方法简单、方便、快捷,在浏览网页的同时就可以实现打印的功能。实例291 调用IE自身的打印功能实现打印实例说明 通过JavaScript调用IE自身的打印功能实现打印,...
  • 自己开发基于Web的打印控件,真正免费不是共享

    万次阅读 热门讨论 2009-09-02 14:08:00
    1.1.0.121 版的控件,更新如下 SetPrintBackground 已被取消 SetMediaHeader 去掉了两个参数,见被划掉的文字部分 在做项目中发现要用到Web方面的打印,于是从网上搜索了一些相关的web打印控件,有scriptx,...
  • 虚拟打印相关

    千次阅读 2012-05-08 17:45:58
    Windows打印体系结构简析与虚拟打印 所谓的迷你驱动和微软统一驱动有啥不同?...不过要澄清的是,一般而言的打印机驱动程序仅仅包括了打印驱动部分, 还包括了假脱机体系中的打印处理器甚至是端口监视
  • blender 3d打印 在我的Blender 3D打印入门系列的第1部分中,我介绍了基本的初步步骤,这些步骤为建立自己的3D模型并准备好进行3D打印而设置Blender环境。 在第2部分中,我将研究实际创建要打印的那些模型的过程。 在...
  • 兼容所有浏览器的Web打印控件的设计方案 ...在需要打印的客户端电脑(操作系统为:Windows系统,XP需要先安装.NET Framework 3.5,其它版本的Windows不需要安装)上下载安装打印的客户端软件。检...
  • 打印进程树

    千次阅读 2009-10-21 13:36:00
    打印进程树   1引言  打印进程树首先要对linux进程结构有具体的了解,其次要寻找相应算法完成...它只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。 它是操作系统结构的基础;
  • 在局域网内 XP能和 98的电脑互相访,2K和2K、XP与XP也能互相通信。在工作站访问服务器时,工作站的“网上邻居”中可以看到服务器的名称,但是点击后却无法看到任何共享内容,或者提示找到网络路径、无权访问等...
  • WEB打印控件Lodop技术手册

    千次阅读 2018-08-12 11:33:41
    WEB打印控件Lodop技术手册 目 录 一、概述 1 二、系统文件 1 install_lodop32.exe 和 install_lodop64.exe 1 LodopFuncs.js 2 三、控件参数 6 Caption 6 Color 6 Border 6 四、功能函数 7 1、基本函数 ...
  • web页面jsp页面的打印

    万次阅读 2014-09-05 10:47:28
    报表在信息系统中占据了极为重要的位置,广义上讲,报表主要以多样的格式呈现和打印动态数据,动态数据主要指保存在数据库中的数据,也可以是文本中的数据、XML数据、Hibernate数据、EJB数据、自定义数据或则是其他...
  • 如何打印qq文件的正文部分

    千次阅读 2017-10-16 09:44:26
    又到了offer高收季了,前几天,因为朋友收到邮件,收需要打印qq邮件正文部分,而且不是全部打印正文,需要打印选定部分的正文,于是自己就摸索了一下,虽然还是麻烦,但是还是比较快的,相比于传统的Ctrl+C和Ctrl+V...
  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,做任何商业用途。如有不对之处,请留言,本人及时更改。1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp...
  • Python中的sys.stdout.write实现打印刷新

    万次阅读 多人点赞 2018-08-06 19:17:18
    今天学习python的常用模块的时候,了解到了time模块和datetime模块,于是想在编译环境中实时打印出时间,不会换行,且打印的时候自动删除前一步打印出的时间(本质原理不是这样),而不是像print那样打印之后自动...
  • 1、装个P1108W的驱动, 下载地址...2、装到提示连上USB线,怎么重装USB线也装上(这时驱动已经装到WINDOWS本身的驱动库...
  • 最近在做一个打印订单明细报表的功能,查阅网上资料,一般的思路都是把需要打印出来的区域提取出来,再赋予到当前页面body中,最后执行print()事件。例如:<!DOCTYPE html> ,
  • 困扰了一天的问题是: 在打印的JS文件中, 引用外部css文件时, 需要拼出实际的含有IP地址的CSS文件地址, 并且需要用双斜杠(//)来代替单斜杠.   =====后来遇到的问题: css文件里的样式, 在页面上显示没有问题, 但是....
  • 打印机是我们日常工作中经常会用到的设备之一,用来打印各种文档资料等。最近有网友反映自己的打印机老是文档挂起无法打印怎么办,打印机无法正常使用。下面小编就教下大家打印机文档被挂起的解决方法。 一般遇到这...
  • 屏蔽内核启动打印信息

    千次阅读 2014-09-07 11:03:21
    最近做的4412板子终于经过测试形成产品,在这之前需要把内核启动过程中的打印信息去掉,并且更换启动LOGO,下面讲讲自己去掉打印信息的过程。 去掉打印信息方法很多,我使用一个相对比较简单的,就是将下面选项的[*]...
  • 打开需要打印的页面,上面有个打印的按钮,点击后没有反应,而弹出的需要安装插件的都设置好,也安装起来。底下就提示网页上有错误。在网上有搜索了不少相关的资料。用了均可用。最后好不容易在网上找到一个打印...
  • jsp页面实现打印

    万次阅读 2009-10-20 21:08:00
    报表在信息系统中占据了极为重要的位置,广义上讲,报表主要以多样的格式呈现和打印动态数据,动态数据主要指保存在数据库中的数据,也可以是文本中的数据、XML数据、Hibernate数据、EJB数据、自定义数据或则是其他...
  • JSP 实现报表打印

    千次阅读 2014-04-16 11:26:09
     说到iReport不得先介绍Jasperreport,Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等
  • Caysn打印机安卓平台开发包接口说明文档及打印示例程序_20170609 支持页模式,标签模式,热敏打印,纯图片打印。 可打印条码,二维码,文本,图片。 可支持,蓝牙,USB,WIFI,云打印
  • Lodop打印参数方法参考

    万次阅读 2017-04-17 10:21:48
    LODOP.PRINT_INIT("打印任务名"); LODOP.SET_PRINT_COPIES(2); bdhtml=window.document.body.innerHTML; var hei = $('#div1').outerHeight(); string = prnhtml; LODOP.SET_PRINT_PAGESIZE (3,'6cm','2cm',2);
  • jsp页面实现打印 .

    千次阅读 2013-07-11 10:46:13
    报表在信息系统中占据了极为重要的位置,广义上讲,报表主要以多样的格式呈现和打印动态数据,动态数据主要指保存在数据库中的数据,也可以是文本中的数据、XML数据、Hibernate数据、EJB数据、自定义数据或则是其他...
  • 接口说明文档下载地址: CaysnPrinter安卓平台开发包接口说明文档 - PrinterLibs For Android_20160926 打印示例程序下载地址: Caysn打印机安卓打印示例代码 - Sample1_20160926 ...Caysn打印机安卓打印示例
  • 调试中日志打印printf技巧

    千次阅读 2016-06-30 15:37:52
    总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得一条条的加上,...
  • CAD2020/2020 快速打印(批量打印)PDF/DWF/JPG/PNG/TIFF-特色:自适应图纸尺寸 下载地址https://pan.baidu.com/s/12Ld9xdoqJL-zIi5Zj-haAQ 提取码: t6hu 仅支持CAD2019、CAD2020,命令栏输入 qw 启动打印程序; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,485
精华内容 29,394
关键字:

如何删除不需要打印的资料