模拟一个简单二级文件管理系统

合集下载

全国计算机二级VISUAL FOXPRO笔试模拟239

全国计算机二级VISUAL FOXPRO笔试模拟239

二级VISUAL FOXPRO笔试模拟239一、选择题1. 数据库(DB)、数据库系统(DBS)、数据库管理系统(DBMS)三者之间的关系是A.DBS包括DB和DBMSB.DBMS包括DB和DBSC.DB包括DBS和DBMSD.DBS就是DB,也就是DBMS答案:A[解答] 本题是对数据库理论中几个基本概念的考查。

数据库系统由五个部分组成:数据(DB)、数据库管理系统(DBMS)、硬件系统、数据库管理员和用户。

因此可知,DBS包括DB和DBMS,故选项A为正确答案。

2. 下列关于栈的描述中错误的是A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针答案:B[解答] 本题考核栈的基本概念。

我们可以通过排除法来确定本题的答案。

栈是限定在一端进行插入与删除操作的线性表,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素,即栈是按照“先进后出”或“后进先出”的原则组织数据的,这便是栈的记忆作用,所以选项A和选项C正确。

对栈进行插入和删除操作时,栈顶位置是动态变化的,栈底指针不变,选项D正确。

由此可见,选项B错误。

3. 专门的关系运算不包括下列中的A.连接运算B.选择运算C.投影运算D.交运算答案:D[解答] 本题考查专门的关系运算。

属于基本概念题、常考题。

在关系模型的数据库理论中,关系的基本运算有三种:连接运算、选择运算、投影运算,不包括交运算,因此可以得出答案为D。

4. 编制一个好的程序,首先要保证它的正确性和可靠性,还应强调良好的编程风格,在选择标识符的名字时应考虑A.名字长度越短越好,以减少源程序的输入量B.多个变量共用一个名字,以减少变量名的数目C.选择含义明确的名字,以正确提示所代表的实体D.尽量用关键字作名字,以使名字标准化答案:C。

二级计算机系统

二级计算机系统

钢铁企业二级计算机系统介绍一、概念的由来二级计算机系统是自动化控制系统的一个概念,指的是自动化控制系统中功能层次较高的部分,用来实现一些较为复杂的控制功能。

通常称为Leve 2 Process Control System,即二级过程控制系统。

从设备上讲,二级系统包括硬件服务器及其在服务器上运行的系统软件和应用软件,以及HMI(人机界面)和相应的通讯网络设备,组成了二级计算机系统。

那么,既然称之为二级,一级自动化系统指的又是什么呢?一级是指基础自动化系统(Level 1 Basic Automation System),主要由PLC(可编逻辑控制器)和DCS(集散控制系统)组成,把现场的仪表数据和设备状态信号采集进来,用于设备的逻辑控制和回路控制(开关量的控制,以及可连续测量的简单物理参数的回路控制,如温度、压力和流量),并将数据和信号传送给二级系统.此外,一级系统接收二级系统的设定数据,根据这些设定数据控制设备达到控制目标。

一级和二级系统一起构成了一条生产线中某道工序设备中较为完备的自动化控制系统。

通俗地说,自动化控制系统好比一个人体,一级是人的肢体,二级是人的大脑,仪表和设备状态信号是人的眼睛和感觉器官,三者合一,构成了一个可以根据外部环境变化而正确做出人体动作反应的现代人。

可见,二级的概念相对于一级系统,用来实现一级系统无法完成的功能。

二、二级计算机系统的功能前面已经说过,二级计算机系统用来实现一些较为复杂的控制功能。

什么样的控制功能较为复杂呢?钢铁生产流程中的成品和半成品制造过程的目标命中控制(一级系统就无法控制了),像热连轧生产线的卷板厚度控制,炼钢转炉吹炼的终点钢水化学成分和终点温度控制,都属于较为复杂的控制功能,必须使用二级计算机系统中的数学模型进行控制,才能够摆脱因人而异的经验的局限,大幅度提高控制目标的命中率。

以热连轧生产线的卷板厚度控制为例,首先收集汇总来料的板坯数据(化学成分、几何尺寸、轧机机架前的板坯温度等)轧机的设备数据(如辊径、标定数据等)和目标数据(卷板目标厚度、公差等)等等,经过数学模型加以计算,得出各个机架的辊缝、轧制力、工作辊转速、机架间冷却水量等等设定数值,将这些设定数值下达到一级基础自动化系统中,从而实现生产线设备的受控运行和物料的受控加入(物料受控加入对炼钢各工序中更为明显),使该生产线的产品达到期望的目标值。

python二级模拟试卷 - 3

python二级模拟试卷 - 3

编程题较难,比考试难度高。

能看懂就可以。

1. 按照“后进先出”原则组织数据的数据结构是____A、双向链表B、队列C、栈D、二叉树2. 以下选项的叙述中,正确的是A、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况B、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况C、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构D、循环队列中元素的个数是由队头指针和队尾指针共同决定3. 关于数据的逻辑结构,以下选项中描述正确的是A、数据在计算机中的顺序存储方式B、数据的逻辑结构是反映数据元素之间逻辑关系的数据结构C、存储在外存中的数据D、数据所占的存储空间量4. 以下选项中,不属于结构化程序设计方法的是A、自顶向下B、可封装C、逐步求精D、模块化5. 以下选项中,不属于软件生命周期中开发阶段任务的是A、软件测试B、概要设计C、详细设计D、软件维护6. 为了使模块尽可能独立,以下选项中描述正确的是A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱B、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强7. 以下选项中叙述正确的是A、软件维护指修复程序中被破坏的指令B、软件交付使用后还需要进行维护C、软件一旦交付就不需要再进行维护D、软件交付使用后其生命周期就结束8. 数据独立性是数据库技术的重要特点之一,关于数据独立性,以下选项中描述正确的是A、以上三种说法都不对B、数据与程序独立存放C、不同数据被存放在不同的文件中D、不同数据只能被对应的应用程序所使用9. 以下选项中,数据库系统的核心是A、数据库B、数据库管理员C、数据库管理系统D、数据模型10. 一间宿舍可以住多个学生,以下选项中描述了实体宿舍和学生之间联系的是A、一对多B、多对多C、一对一D、多对一11. 以下选项中不是P y t h o n文件读操作方法的是A、r e a d t e x tB、r e a dC、r e a d a l lD、r e a d l i n e12. 以下选项中说法不正确的是A、静态语言采用解释方式执行,脚本语言采用编译方式执行B、C语言是静态语言,P y t h o n语言是脚本语言C、解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程D、编译是将源代码转换成目标代码的过程13. 拟在屏幕上打印输出“H e l l o Wo r l d”,以下选项中正确的是A、p r i n t(H e l l o Wo r l d)B、p r i n t f('H e l l o Wo r l d')C、p r i n t('H e l l o Wo r l d')D、p r i n t f("H e l l o Wo r l d")14. 以下选项中,不是P y t h o n语言特点的是A、黏性扩展:P y t h o n语言能够集成C、C++等语言编写的代码B、平台无关:P y t h o n程序可以在任何安装了解释器的操作系统环境中执行C、变量声明:P y t h o n语言具有使用变量需要先定义后使用的特点D、强制可读:P y t h o n语言通过强制缩进来体现语句间的逻辑关系15. I D L E环境的退出命令是A、e x i t()B、c l o s e()C、e s c()D、回车键16. 以下选项中,不符合P y t h o n语言变量命名规则的是A、k e y w o r d_33B、k e y w o r d33_C、_33k e y w o r dD、33_k e y w o r d17. 以下选项中,不是P y t h o n语言保留字的是A、g o t oB、f o rC、w h i l eD、c o n t i n u e18. 以下选项中,P y t h o n语言中代码注释使用的符号是A、!B、//C、/*……*/D、#19. 关于P y t h o n语言的变量,以下选项中说法正确的是A、随时命名、随时赋值、随时变换类型B、随时声明、随时使用、随时释放C、随时声明、随时赋值、随时变换类型D、随时命名、随时赋值、随时使用20. P y t h o n语言提供的3个基本数字类型是A、整数类型、浮点数类型、复数类型B、整数类型、二进制类型、浮点数类型C、整数类型、二进制类型、浮点数类型D、整数类型、二进制类型、复数类型21. 以下选项中,不属于I P O模式一部分的是A、O u t p u t(输出)B、P r o g r a m(程序)C、P r o c e s s(处理)D、I n p u t(输入)22. 以下选项中,属于P y t h o n语言中合法的二进制整数是A、0b C3FB、0B1019C、0b1708D、0B101023. 关于P y t h o n语言的浮点数类型,以下选项中描述错误的是A、浮点数类型与数学中实数的概念一致B、P y t h o n语言要求所有浮点数必须带有小数部分C、浮点数类型表示带有小数的类型D、小数部分不可以为024. 关于P y t h o n语言数值操作符,以下选项中描述错误的是A、x//y表示x与y之整数商,即不大于x与y之商的最大整数B、x/y表示x与y之商C、x%y表示x与y之商的余数,也称为模运算D、x**y表示x的y次幂,其中,y必须是整数25. 以下选项中,不是P y t h o n语言基本控制结构的是A、循环结构B、顺序结构C、程序异常D、跳转结构26. 关于分支结构,以下选项中描述不正确的是A、i f语句中语句块执行与否依赖于条件判断B、i f语句中条件部分可以使用任何能够产生T r u e和F a l s e的语句和函数C、多分支结构用于设置多个判断条件以及对应的多条执行路径D、二分支结构有一种紧凑形式,使用保留字i f和e l i f实现27. 关于P y t h o n函数,以下选项中描述错误的是A、函数是一段可重用的语句组B、函数是一段具有特定功能的语句组C、函数通过函数名进行调用D、每次使用函数需要提供相同的参数作为输入28. 以下选项中,不是P y t h o n中用于开发用户界面的第三方库是A、t u r t l eB、p y g t kC、w x P y t h o nD、P y Q t29. 以下选项中,不是P y t h o n中用于进行数据分析及可视化处理的第三方库是A、n u m p yB、m x n e tC、p a n d a sD、ma y a v i230. 以下选项中,不是P y t h o n中用于进行We b开发的第三方库是A、s c r a p yB、p y r a m i dC、D j a n g oD、f l a s k31.下面代码的执行结果是>>>1.23e-4+5.67e+8j.r e a lA、5.67e+8B、1.23C、1.23e4D、0.00012332.下面代码的执行结果是>>>s="11+5i n">>>e v a l(s[1:-2])A、6B、执行错误C、16D、11+533.下面代码的执行结果是>>>a b s(-3+4j)A、执行错误B、5.0C、4.0D、3.034.下面代码的执行结果是>>>x=2>>>x*=3+5**2A、8192B、15C、56D、1335.下面代码的执行结果是l s=[[1,2,3],[[4,5],6],[7,8]]p r i n t(l e n(l s))A、4B、8C、1D、336.下面代码的执行结果是a="P y t h o n等级考试"b="="c=">"p r i n t("{0:{1}{3}{2}}".f o r ma t(a,b,25,c))A、P y t h o n等级考试===============B、>>>>>>>>>>>>>>>P y t h o n等级考试C、===============P y t h o n等级考试D、P y t h o n等级考试===============37.给出如下代码:w h i l e T r u e:g u e s s=e v a l(i n p u t())i f g u e s s==0x452//2:b r e a k作为输入能够结束程序运行的是A、b r e a kB、0x452C、553D、"0x452//2"38.下面代码的执行结果是:l s=["2020","20.20","P y t h o n"]l s.a p p e n d(2020)l s.a p p e n d([2020,"2020"])p r i n t(l s)A、['2020','20.20','P y t h o n',2020,2020,'2020']B、['2020','20.20','P y t h o n',2020,[2020,'2020']]C、['2020','20.20','P y t h o n',2020]D、['2020','20.20','P y t h o n',2020,['2020']]39.设c i t y.c s v文件内容如下:巴哈马,巴林,孟加拉国,巴巴多斯白俄罗斯,比利时,伯利兹下面代码的执行结果是:f=o p e n("c i t y.c s v","r")l s=f.r e a d().s p l i t(",")f.c l o s e()p r i n t(l s)A、['巴哈马','巴林','孟加拉国','巴巴多斯','白俄罗斯','比利时','伯利兹']B、['巴哈马','巴林','孟加拉国','巴巴多斯','\n','白俄罗斯','比利时','伯利兹']C、['巴哈马, 巴林, 孟加拉国, 巴巴多斯, 白俄罗斯, 比利时, 伯利兹']D、['巴哈马','巴林','孟加拉国','巴巴多斯\n白俄罗斯','比利时','伯利兹']40.下面代码的执行结果是:d={}f o r i i n r a ng e(26):d[c h r(i+o r d("a"))]=c h r((i+13)%26+o r d("a"))f o r c i n"P y t h o n":p r i n t(d.g e t(c,c),e n d="")A、P y t h o nB、C a b u g lC、P l g u b aD、P a b u g lC卷基本编程题1根据输入字符串s,输出一个宽度为15字符,字符串s居中显示,以“=”填充的格式。

计算机专业基础综合(文件管理)模拟试卷3(题后含答案及解析)

计算机专业基础综合(文件管理)模拟试卷3(题后含答案及解析)

计算机专业基础综合(文件管理)模拟试卷3(题后含答案及解析) 题型有:1. 单项选择题 2. 综合应用题单项选择题1-40小题,每小题2分,共80分。

下列每题给出的四个选项中,只有一个选项是最符合题目要求的。

1.UNIX系统中,文件存储器的管理采用的是( )。

A.位图法B.空闲块表法C.成组链接法D.单块连接法正确答案:C 涉及知识点:文件管理2.只适合顺序存取,不提供随机存取功能的存储介质是( )。

A.磁盘B.磁鼓C.磁带D.光盘正确答案:C 涉及知识点:文件管理3.对磁盘请求重新排队的目的是( )。

A.重置移臂时间B.让优先级高的进程先I/OC.减少传输时间D.减少旋转时间正确答案:D 涉及知识点:文件管理4.下列不便于文件扩充的物理文件结构是( )。

A.连续文件B.串联文件C.索引文件D.多重索引文件正确答案:A 涉及知识点:文件管理5.在文件系统中,文件的不同物理结构有不同的优缺点。

在下列文件的物理组织结构中,不具有直接读写文件任意一个记录的能力的结构是( )。

A.连续文件B.串联文件D.逻辑文件正确答案:B 涉及知识点:文件管理6.文件系统为每个文件另建立一张指示逻辑记录和物理记录之间的对应关系表,由此表和文件本身构成的文件是( )。

A.连续文件B.串联文件C.索引文件D.逻辑文件正确答案:C 涉及知识点:文件管理7.在磁盘上,最容易导致存储碎片发生的物理文件结构是( )。

A.隐式链接B.顺序存放C.索引存放D.显式链接正确答案:B解析:本题考查物理文件结构的特点。

顺序文件的优点是在顺序存取时速度较快,因为这类文件往往从头至尾依次顺序存取。

但是也存在缺点,首先要求在存储文件时确定文件的长度,依此来分配相应的存储空间,这样会造成在寻找存储空间时耗时较多,一旦没有足够的存储空间来存放该文件时会造成文件存储的失败。

其次,顺序文件不便于文件的扩充,在实际工作中,文件的长度往往会改变,可能会变长,也有可能变短。

操作系统课程设计项目参考

操作系统课程设计项目参考

滴加碘液后
滴加碘液前
12/12/2021
第十二页,共二十三页。
消化(xiāohuà):在消化道内将食物分解成可吸收 (xīshōu)的成分的过程
(包括物理性消化和化学性消化)
吸收(xīshōu):营养物质通过消化道壁进入循环 系统的过程
12/12/2021
第十三页,共二十三页。
消化(xiāohuà)和吸收的过程
12/12/2021
第十九页,共二十三页。
练习(liànxí)
• 2、分析数据,指出(zhǐ chū)哪一部分消化道中消化液最多。
• 在每天摄入800克食物和1200毫升水的情况下, 消化腺大致分泌以下数量消化液。 1500毫升唾液 2000毫升胃液 1500毫升肠液 500毫升胆汁 1500毫升胰液
12/12/2021
第二十二页,共二十三页。
内容 总结 (nèiróng)
第二节。食物中的营养物质是在消化系统中被消化和吸收的。这粒西瓜籽在姗姗的消化道内, 经过了难忘的时光。它先遇到像轧钢机似的上、下尖硬的怪物,差点儿将它压得粉身碎骨。后来它
No 钻进了一条(yī tiáo)又长又窄的迷宫,它在这里走了很久,身边的许多物质都神秘地消失了。走出迷
唾液腺、胃腺(wèixiàn)、肝脏、胰腺、肠腺
1、淀粉在__口__腔__开始消化、蛋白质在____开始胃消化、脂肪在_______开始 消小化肠。
2、胆汁是一种消化液,但不含消化酶,起乳化脂肪的作用。
二、人体消化、吸收的主要器官—— _____小肠 能 训 练解
胰脏:分泌(fēnmì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。

操作系统实验指导书

操作系统实验指导书

操作系统实验指导书一、实验说明1、实验目的实验是操作系统原理课程中不可缺少的重要教学环节,实验目的是使学生理论联系实际,使学生在实践探索中去发现问题、去解决问题,提高了学生获取知识和应用技术的能力,培养了学生分析和解决问题的能力。

《操作系统原理》要求理论与实践相结合,本门实验课程是对《操作系统原理》课堂教学的一个重要补充,与理论学习起着相辅相成的作用,是实施《操作系统原理》教学的一个重要组成部分。

通过本实验课的实践学习,可以增强本专业的学生对系统实现的认识。

对加深理解和掌握操作系统相关原理有重要帮助。

2、实验要求进一步了解和掌握操作系统原理,提高系统设计的能力。

对每一实验题目,应独立完成,并要求:·上机前,学生必须做好充分的实验准备工作,掌握与实验相关的背景知识,用任一种高级语言编写程序。

·上机时,认真调试,并观察、记录程序运行过程中出现的现象和问题。

·上机后,分析实验结果并写出实验报告。

3、实验报告要求每个实验(包括选做的)均应编写实验报告,学生实验后要写出严谨的、实事求是的、文字通顺的、字迹公整的实验报告。

实验报告应包括以下内容:(1)实验题目(2)实验目的(3)实验内容●程序中使用的数据结构及符号说明●流程图●源程序清单并附上注释(4)实验结果及分析●运行结果(必须是上面程序清单所对应输出的结果)●对运行情况所作的分析以及本次调试程序所取得的经验。

如果程序未能通过,应分析其原因。

二、实验内容实验一熟悉使用计算机系统一、实验名称:熟悉使用计算机系统二、实验目的与要求通过对Windows操作系统的使用,熟悉Windows操作系统中的基本概念,如单用户、多任务、进程和文件等,熟悉Windows中命令行方式下常用命令的使用方法;进一步熟悉TC语言与开发环境,为以后的实验打好基础。

三、实验内容1.开机后,熟悉Windows的界面(桌面、任务栏、开始按钮<点击后出现“开始”菜单>、我的电脑图标、回收站、我的文档)。

计算机等级考试二级办公软件高级应用模拟题2020年(32)_含答案与解析)-交互86

计算机等级考试二级办公软件高级应用模拟题2020年(32)_含答案与解析)-交互86

计算机等级考试二级办公软件高级应用模拟题2020年(32)(总分100, 做题时间120分钟)选择题1.程序流程图中带有箭头的线段表示的是SSS_SINGLE_SELA图元关系B数据流C控制流D调用关系分值: 3.5答案:C程序流程图是一种传统的、应用广泛的软件过程设计工具,通常也称为程序框图。

其中,用带箭头的线段表示控制流,用矩形表示加工步骤,用菱形表示逻辑条件。

2.软件设计中模块划分应遵循的准则是SSS_SINGLE_SELA低内聚低耦合B高内聚低耦合C低内聚高耦合D高内聚高耦合分值: 3.5答案:B耦合性与内聚性是模块独立性的两个定性标准。

一般一个较优秀的软件设计,应尽量做到高内聚、低耦合,即提高模块内的内聚性和减弱模块之间的耦合性,有利于提高模块的独立性。

3.软件设计中划分模块的准则是SSS_SINGLE_SELA低内聚低耦合B高内聚低耦合C低内聚高耦合D高内聚高耦合答案:B耦合性与内聚性是模块独立性的两个定性标准。

一般一个较优秀的软件设计,应尽量做到高内聚、低耦合,即提高模块内的内聚性和减弱模块之间的耦合性,有利于提高模块的独立性。

4.下面描述中错误的是SSS_SINGLE_SELA系统总体结构图支持软件系统的详细设计B软件设计是将软件需求转换为软件表示的过程C数据结构与数据库设计是软件设计的任务之一DPAD图是软件详细设计的表示工具分值: 3.5答案:A软件设计是将软件需求转换为软件表示的过程;数据结构与数据库设计是软件设计的任务之一;PAD图,即问题分析图,是一种主要用于描述软件详细设计的图形工具。

5.下面不属于需求分析阶段任务的是SSS_SINGLE_SELA确定软件系统的功能需求B确定软件系统的性能需求C需求规格说明书评审D制定软件集成测试计划分值: 3.5答案:D需求分析阶段的工作可分为4个阶段:需求获取、需求分析、编写需求规格说明书、需求评审。

6.数据字典(DD)所定义的对象都包含于SSS_SINGLE_SELA数据流图(DFD图)B程序流程图C软件结构图D方框图答案:A本题考查数据流图概念。

计算机二级实战技巧分享

计算机二级实战技巧分享

计算机二级实战技巧分享计算机技术的发展与普及使我们的工作和生活变得更加便利和高效。

作为现代人,熟练掌握计算机技能已经成为一项必备的能力。

在计算机二级考试中,除了理论知识外,实战技巧也占据了重要的地位。

本文将分享一些提高计算机二级实战技巧的方法和技巧。

一、熟悉操作系统操作系统是计算机的核心软件,了解并熟悉常见操作系统的使用方法是提高实战技巧的基础。

比如,Windows系统的常用快捷键、文件管理与搜索、软件安装与卸载等操作都需要掌握。

此外,还应了解一些系统优化的方法,如清理垃圾文件、关闭自动启动等,以保证计算机的良好性能。

二、熟练使用办公软件办公软件是计算机应用的重要组成部分。

熟练掌握常用办公软件如Microsoft Office套件、WPS Office等,能够提高办公效率,更好地完成各种文档处理和数据分析任务。

对于表格处理,合理运用函数、筛选、排序等功能,对于文档编辑,掌握格式调整、插入图片、制作目录等技巧,对于幻灯片制作,掌握演示文稿设计、动画效果应用等技巧,将有效提升办公效率和专业程度。

三、网络应用与安全互联网的广泛应用使得信息获取和沟通更加方便,但同时也带来了安全风险。

在实战技巧中,熟练掌握网络浏览器的使用、搜索引擎的优化、网络会议工具的操作等,能够更好地利用网络资源。

此外,应了解网络安全知识,如密码设置、防火墙配置、恶意软件防范等,以保证个人信息和计算机系统的安全。

四、编程技巧与调试编程是计算机二级考试的重要内容之一。

提高实战技巧,需要熟练掌握至少一种编程语言,如C、Java、Python等。

掌握编程语言的语法和基本逻辑,能够编写简单的程序,并能够进行调试和排错,是实战技巧的关键。

此外,了解一些编程工具和开发环境的使用方法,如IDE的操作、代码版本管理工具等,也能够提高效率和专业度。

五、硬件维护与故障处理在实际使用计算机过程中,硬件故障和错误是不可避免的。

熟悉常见硬件设备的安装和调试方法,能够解决一些常见故障,如显示器无信号、鼠标键盘失灵等,可以提高使用实战技巧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:模拟一个简单二级文件管理系统一、实验内容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.2 数据结构file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组.代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <string.h>#define MaxUser 100 //定义最大MDF主目录文件#define MaxDisk 512*1024 //模拟最大磁盘空间#define commandAmount 12 //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk]; //模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};//两级目录结构体typedef struct user_file_directory //用户文件目录文件UFD {//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数//文件管理void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况//用户管理void userCreate();int login();int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录int main(){char order[commandAmount][10];strcpy(order[0],"create");strcpy(order[1],"rm");strcpy(order[2],"cat");strcpy(order[3],"write");strcpy(order[4],"fine");strcpy(order[5],"chmod");strcpy(order[6],"ren");strcpy(order[7],"dir");strcpy(order[8],"close");strcpy(order[9],"return");strcpy(order[10],"exit");strcpy(order[11],"df");charcommand[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];int i,k,j;int length;initDisk(); //初始化磁盘for(i=0;i<MaxUser;i++) //初始化用户UFD目录文件的头指针{userTable[i].user=(UFD *)malloc(sizeof(UFD));userTable[i].user->next=NULL;}while(1){printf("********************************************\n");printf(" 1、Creat user\n");printf(" 2、login\n");printf("********************************************\n");printf("Please chooce the function key:>");int choice;scanf("%d",&choice);if(choice==1) userCreate();else if(choice==2) userID=login();else printf("您的输入有误,请重新选择\n");while(userID!=-1){fflush(stdin);printf("———————————————————————————————————————\n");printf(" create-创建格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件\n");printf(" rm-删除格式:rm a1,将删除名为a1的文件\n");printf(" cat-查看文件内容格式:cat a1,显示a1的内容\n");printf(" write-写入格式:write a1\n");printf(" fine-查询格式:fine a1 ,将显示文件a1的属性\n");printf(" chmod-修改格式:chmod a1 r,将文件a1的权限改为只读方式\n");printf(" ren-重命名格式:ren a1 b1 ,将a1改名为b1\n");printf(" dir-显示文件格式:dir aaa,将显示aaa用户的所有文件\n");printf(" df-显示磁盘空间使用情况格式:df\n");printf(" close-关闭文件格式:close a1,将关闭文件a1\n");printf(" return-退出用户,返回登录界面\n");printf(" exit-退出程序\n");printf("————————————————————————————————————————\n");printf("please imput your command:>");gets(command);int select;for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;i<commandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf("您输入的命令有误,请重新输入\n");continue;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++) //commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case 0:for(i=k+1,k=0;command[i]!=' ';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0; //初始化文件长度for(i=strlen(command_str3)-1;i>=0;i--) //把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case 1:fileDel(command_str2);break;case 2:fileCat(command_str2);break;case 3:fileWrite(command_str2);break;case 4:fileFine(command_str2);break;case 5:for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case 6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case 7:fileDir(command_str2);break;case 8:fileClose(command_str2);break;case 9:UFD *p;for(p=userTable[userID].user->next;p!=NULL;p=p->next) //退出用户之前关闭所有打的文件if(p->file->openFlag)p->file->openFlag=false;system("cls");userID=-1;break;case 10:exit(0);break;case 11:diskShow();break;}}}return 0;}void userCreate(){char c;char userName[10];int i;if(used<MaxUser){printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elseuserName[i]=c;printf("%c",c);}userName[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");return;}}strcpy(userTable[used].userName,userName);printf("\n");printf("请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elseuserTable[used].password[i]=c;printf("*");}userTable[userID].password[i]='\0';printf("\n");printf("创建用户成功\n");used++;system("pause");}else{printf("创建用户失败,用户已达到上限\n");system("pause");}fflush(stdin);}int login(){char name[10],psw[10];char c;int i,times;printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elsename[i]=c;printf("%c",c);}name[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf("\n您输入的用户名不存在\n");system("pause");return -1;}for(times=0;times<3;times++){memset(psw,'\0',sizeof(psw));printf("\n请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elsepsw[i]=c;printf("*");}printf("\n");for(i=0;i<used;i++){if(!strcmp(psw,userTable[i].password)){printf("用户登录成功\n");system("pause");break;}}if(i==used){printf("您输入的密码错误,您还有%d次输入机会\n",2-times);if(times==2) exit(0);}else break;}fflush(stdin);return i;}void initDisk(){diskHead=(diskNode *)malloc(sizeof(diskNode));diskHead->maxlength=MaxDisk;diskHead->useFlag=0;diskHead->start=0;diskHead->next=NULL;}int requestDist(int &startPostion,int maxLength){int flag=0; //标记是否分配成功diskNode *p,*q,*temp;p=diskHead;while(p){if(p->useFlag==0&&p->maxlength>maxLength){startPostion=p->start;q=(diskNode *)malloc(sizeof(diskNode));q->start=p->start;q->maxlength=maxLength;q->useFlag=1;q->next=NULL;diskHead->start=p->start+maxLength;diskHead->maxlength=p->maxlength-maxLength;flag=1;temp=p;if(diskHead->next==NULL) diskHead->next=q;else{while(temp->next) temp=temp->next;temp->next=q;}break;}p=p->next;}return flag;}void fileCreate(char fileName[],int length,char fileKind[]){//int i,j;time_t rawtime;int startPos;UFD *fileNode,*p;for(p=userTable[userID].user->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if(requestDist(startPos,length)){fileNode=(UFD *)malloc(sizeof(UFD));fileNode->file=(fileTable *)malloc(sizeof(fileTable)); //这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->file指向会出错strcpy(fileNode->file->fileName,fileName);strcpy(fileNode->file->fileKind,fileKind);fileNode->file->maxlength=length;fileNode->file->strat=startPos;fileNode->file->openFlag=false;time(&rawtime);fileNode->file->timeinfo=localtime(&rawtime);fileNode->next=NULL;if(userTable[userID].user->next==NULL)userTable[userID].user->next=fileNode;else{p=userTable[userID].user->next;while(p->next) p=p->next;p->next=fileNode;}printf("创建文件成功\n");system("pause");}{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void freeDisk(int startPostion){diskNode *p;for(p=diskHead;p!=NULL;p=p->next){if(p->start==startPostion)break;}p->useFlag=false;}void fileDel(char fileName[]){UFD *p,*q,*temp;q=userTable[userID].user;p=q->next;while(p){if(!strcmp(p->file->fileName,fileName)) break;else{p=p->next;q=q->next;}}if(p){if(p->file->openFlag!=true) //先判断是否有进程打开该文件{temp=p;q->next=p->next;freeDisk(temp->file->strat); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}elseprintf("该文件已被进程打开,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileCat(char fileName[]){int startPos,length;int k=0;UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){startPos=p->file->strat;length=p->file->length;p->file->openFlag=true; //文件打开标记printf("*****************************************************\n");for(int i=startPos;k<length;i++,k++){if(i%50==0) printf("\n"); //一行大于50个字符换行printf("%c",disk[i]);}printf("\n\n*****************************************************\n");printf("%s已被read进程打开,请用close命令将其关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(char fileName[]){UFD *p,*q;q=userTable[userID].user;int i,k,startPos;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){if(!strcmp(p->file->fileKind,"r")) //判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos=p->file->strat;p->file->openFlag=true; //文件打开标记p->file->length=strlen(str);if(p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for(i=startPos,k=0;k<(int)strlen(str);i++,k++)disk[i]=str[k];printf("文件写入成功,请用close命令将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFine(char fileName[])UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){printf("********************************************\n");printf("文件名:%s\n",p->file->fileName);printf("文件长度:%d\n",p->file->maxlength);printf("文件在存储空间的起始地址:%d\n",p->file->strat);printf("文件类型:%s\n",p->file->fileKind);printf("创建时间:%s\n",asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void chmod(char fileName[],char kind[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){strcpy(p->file->fileKind,kind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRen(char fileName[],char name[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){while(q->next){if(!strcmp(q->next->file->fileName,name)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q=q->next;}strcpy(p->file->fileName,name);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(char userName[]){UFD *p;int i,k;for(i=0;i<MaxUser;i++){if(!strcmp(userTable[i].userName,userName)){k=i;break;}}if(i==MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p=userTable[k].user->next;printf("************************************************************************* *******\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for(;p!=NULL;p=p->next)printf("%s %d %d %s %s",p->file->fileName, p->file->maxlength,p->file->strat,p->file->fileKind,asctime(p->file->timeinfo));printf("************************************************************************* *******\n");system("pause");}}void diskShow(){diskNode *p;int i=0,unusedDisk=0;printf("************************************************************************* **\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for(p=diskHead;p!=NULL;p=p->next,i++){if(p->useFlag==false) unusedDisk+=p->maxlength;printf(" %d %d %d %d \n",i,p->start,p->maxlength,p->useFlag);}printf("************************************************************************* **\n");printf("磁盘空间总容量:512*1024bit 已使用:%dbit 末使用:%dbit\n\n",MaxDisk-unusedDisk,unusedDisk);system("pause");}void fileClose(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){p->file->openFlag=false;printf("%s文件已关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}运行结果视图:。

相关文档
最新文档