home下的点是下午三点是什么时辰目录?

当前访客身份:游客 [
1)Writing is thinking.  2)If you&re interesting someone won&t agree with what you said.
:/usr/local/bin/tail -n +$(tail -n1 /home/stor...
:这是把责任都推给了技术,认为技术万能,所以不相...
:总结的好,每个版本的新特性一目了然。
:牛逼!!
:不错,原理要清楚!
:nc的经典使用方法,收藏了。
今日访问:1304
昨日访问:1412
本周访问:4158
本月访问:12799
所有访问:446620
玩转 Linux 之:磁盘分区、挂载知多少?
发表于11个月前( 01:24)&&
阅读(2659)&|&评论()
0人收藏此文章,
上周在做日志机扩容的时候,发现运维同学将一块硬盘的挂载点没有同以前的日志机保持一致,考虑到这会给日后的维护带来麻烦,于是尝试着手修改,在修改的同时,review 了下之前日志机的挂载配置,发现居然存在随时掉坑的可能。。。至于什么坑,我会在文末说明。
so,感觉这事儿虽然简单,也许一条命令就搞定的事情,但是,很多童鞋可能不明就里,纯复制粘贴网上的命令,这很容易给人挖坑埋雷,今天就来聊聊 linux 下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普吧~
1、Linux 分区简介
1.1 主分区 vs 扩展分区
硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition),主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩展分区再分下去的是什么呢?它就是逻辑分区(Logical Partion),逻辑分区没有数量上限制。&
1.2 驱动器标示的含义
对习惯于使用Dos或Windows的同学来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。然而对Red Hat Linux新手来说,可就有点恼人了。因为对Linux用户来说无论有几个分区,都得分给目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Red Hat Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区就在linux的存储空间的某个目录下获得。 下面我们先来看看Red Hat Linux的驱动器是如何标识的。 对于IDE硬盘,驱动器标识符为“hdx1”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“1”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。对于SCSI硬盘则标识为“sdx1”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样,不再赘述。 我们从上面可以看到,Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式常用的有Ext3和Swap两种,Ext3用于存放系统文件,Swap则作为Red Hat Linux的交换分区(相当于windows中的虚拟内存文件)。那么现在我们就可以知道Red Hat Linux至少需要两个专门的分区(Linux Native(本地)和Linux Swap(交换))。由于不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多个类型为“Linux Native”的硬盘分区,但是在Red Hat Linux的每一个分区都必须要指定一个“Mount Point”(挂载点),告诉Red Hat Linux在启动时,这个目录要给哪个分区使用。对“Swap”分区来说, 一般也定义一个,且它不必要定义载入点。 下面我们先对“Linux Native”和“Linux Swap”有个初步的了解。
SWAP分区是LINUX暂时存储数据的交换分区,它主要是把主内存上暂时不用得数据存起来,在需要的时候再调进内存内,且作为SWAP使用的分区不用指定“Mout Point”(载入点),既然它作为交换分区,我们理所当然应给它指定大小,它至少要等于系统上实际内存的量,一般来说它的大小是内存的一至两倍。另外你也可以创建和使用一个以上的交换分区,最多16个。
Linux Native是存放系统文件的地方,一般用EXT3的分区类型,对Red Hat Linux来说,有了较大的选择余地,可以把系统文件分几个区来装(必须要说明挂载点),也可以就装在同一个分区中(挂载点是“/”)。
1.3&为什么要自定义多个分区?
分多个区有以下几个目的:
在不损失数据的情况下重装系统,比如独立设置/home挂载点,重装系统的时候直接标记回/home,数据不会有任何损失。
针对不同挂载点的特性分配合适的文件系统以合理发挥性能,比如对/var使用reiserfs,对/home使用xfs,对/使用ext4。
针对不同的挂载点开启不同的挂载选项,如是否需要即时同步,是否开启日志,是否启用压缩。
大硬盘搜索范围大,效率低
磁盘配额只能对分区做设定
/home、/var、/usr/local 经常是单独分区,因为经常会操作,容易产生碎片
2、挂载点目录简介
2.1 常见的挂载目录结构
每块硬盘都分为若干个分区,每个分区都有自己的文件系统。Windows为这些文件系统各自指定了一个字母。不过 GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。 正如 Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上。当根挂载完成之后,您就可以将其它文件系统挂载于树形结构各种挂载点上。根结构下的任何目录都可以作为挂载点,而您也可以将同一文件系统同时挂载于不同的挂载点上。 挂载点实际上就是linux中的磁盘文件系统的入口目录
2.2 常见的挂载目录说明
目录 & &内容&
/   根目录,存放系统命令和用户数据等(如果下面挂载点没有单独的分区,它们都将在根目录的分区中) & /boot & &boot loader 的静态链接文件,存放与Linux启动相关的程序 /home & &用户目录,存放普通用户的数据 /tmp & &临时文件 /usr & &是Red Hat Linux系统存放软件的地方,如有可能应将最大空间分给它 /usr/local 自已安装程序安装在此 /var & &不断变化的数据,服务器的一些服务、日志放在下面。 /opt & &(Option可选的)附加的应用程序软件包&
/bin & &基本命令执行文件& /dev & &设备文件& /etc & &主机特定的系统配置& /lib & &基本共享库以及内核模块& /media & &用于移动介质的挂载点& /mnt & &用于临时挂载文件系统或者别的硬件设备(如光驱、软驱)& /proc & &系统信息的虚拟目录(2.4 和 2.6 内核),这些信息是在内存中,由系统自己产生的。& /root & &root 用户的目录& /sbin & &基本系统命令执行文件& /sys & &系统信息的虚拟目录(2.6 内核)& /srv & &系统提供的用于 service 的数据 /usr/X1186 & & & & X-Windows目录,存放一些X-Windows的配置文件 /usr/include & & &系统头文件,存储一些C语言的头文件 /usr/src & & & & & Linux内核源代码,Linux系统所安装的内核源代码都保存在此 /usr/bin & & & & &对/bin目录的一些补充 /usr/sbin & & & &对/sbin目录的一些补充 /lost+found 这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下。 /boot: 必须总是物理地包含 /etc、/bin、/sbin、/lib 和 /dev,否则您将不能启动系统。 /home:每个用户将放置他的私有数据到这个目录的子目录下。 /tmp: 程序创建的临时数据大都存到这个目录。 /usr:包含所有的用户程序(/usr/bin),库文件(/usr/lib),文档(/usr/share/doc),等等。 /var:所有的可变数据,如新闻组文章、电子邮件、网站、数据库、软件包系统的缓存等等,将被放入这个目录。这个目录的大小取决于您计算机的用途,但是对大多数人来说,将主要用于软件包系统的管理工具。如果做服务器的话空间应尽量大。我的服务器的实际分法及实际使用的大小,还没有实际投入使用。所以/var目录没有用那么多。一般WEB存放网页的目录是/var/www,postfix邮件的存放邮件的目录是:/var/mail,var/log,是系统日志记录分区, /var/spool:存放一些邮件、新闻、打印队列等。 /opt:存放可选的安装的软件。
上面介绍了几个挂载点,一般来说我们最少需要两个分区(当然只要一个 / 分区也可以),需要一个SWAP分区,和一个“/”分区,但把一些常用、重要的挂载点分到其它分区,这样便于管理。一般一个/分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照需要来定的。我们可以使用Red Hat Linux提供的硬盘管理工具Disk Druid来完成分区和挂载点设置。
对照上图和目录简介,可以把Linux系统的挂载点想象成一棵大树 / 为大树的树根 / 衍生的其他挂载点为这颗大树的树枝 挂载点下的文件为树叶
2.3 为什么 linux 的分区需要有挂载这个动作呢?
如果你看过我之前写的 Linux 系列文章,那么应该记得我曾经标红过一句话:linux 下一切皆文件!换言之就是linux操作系统将系统中的一切都作为文件来管理。在windows中我们常见的硬件设备(打印机、网卡、声卡...)、磁盘分区等,在linux中统统都被视作文件,对设备、分区的访问就是读写对应的文件。
3、实战分区挂载
3.1 临时挂载
举个栗子,原来分区情况如下:
[root@sg-sl-data]# df -h
Filesystem
Used Avail Use% Mounted on
0% /dev/shm
3.1.1 先卸载分区:
umount /disk1 umount /data
3.1.2 再重新挂起来:
mount /dev/sda5 /data mount /dev/sda6 /disk1 注意:如前所述,不能2个分区同时挂载到/data
3.2 永久挂载:开机自动挂载
上面步骤中的方法只是临时工干的活儿,开机后磁盘分区会不可见或者还是挂载之前的模样,要想永久生效,还需要修改/etc/fstab,将
LABEL=/data & & & & & & /data & & & & & & & & & ext3 & &defaults & & & &1 2 LABEL=/disk1 & & & & & &/disk1 & & & & & & & & &ext3 & &defaults & & & &1 2 修改为: /dev/sda5 & & & & & & /data & & & & & & & & & ext3 & &defaults & & & &1 2 /dev/sda6 & & & & & &/disk1 & & & & & & & & &ext3 & &defaults & & & &1 2
说明:fstab 是文件系统分配表的配置文件,该文件有着严格的语法格式限制,类似 crontab 一样,保存时也会对你的输入格式进行校验,请慎重使用,否则会有意想不到的问题发生。其一共有 6 个字段,空格分隔,具体每个字段的含义请参考这里,不再赘述:
3.3 以下是添加硬盘&分区&挂载(高危操作,新手慎用!)
友情提示:分区操作是高危操作,尤其是新手同学请勿在生产环境随意尝试,否则后果自负!&
更为详细的分区教程请参见:
linux磁盘分区fdisk命令详解 &
fdisk /dev/sdb
输入m---n---p---1--回车---回车---p---w
mkfs.ext3 /dev/sdb1
mkdir /disk2
mount /dev/sdb1 /disk2/
在/etc/fstab中添加:
4、通过 fstab 设置开机挂载的坑
fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:
/dev/sdb4 /mnt/usb vfat utf8,umask=0 0 0
/dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。
因此上面 3.2 小节中的配置直接写&/dev/sda6 是有很大的隐患的,重启后硬盘的顺序可能发生变化,比如 你把 nginx 的用户日志放在一个单独的分区上,那么重启后虽然设置了 fstab,但是由于顺序变了相同的分区号可能代表不同的硬盘分区了,这样就会导致某些分区上的数据服务不可用了。
(PS:文章开头说过在 review 以前同学的挂载配置的时候发现了埋下的一个雷,正是上面的问题。)
这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。
在 fstab 中用 UUID 挂载分区,看起来向这样: UUID= /mnt/usb vfat utf8,umask=0 0 0 在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。 那么,我们如何知道一个分区的 UUID 呢? 有 3 种方法:
4.1 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息
# ls -l /dev/disk/by-uuid/ ------ lrwxrwxrwx 1 root root 10 10-13 09:14 B -& ../../sdb5 lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-b-b5a8a0a93645 -& ../../sda4 .....&
4.2 通过 vol_id 命令
# vol_id /dev/sdb5 ID_FS_USAGE=filesystem ID_FS_TYPE=vfat ID_FS_VERSION=FAT32 ID_FS_UUID=B ID_FS_UUID_ENC=B ID_FS_LABEL=SWAP ID_FS_LABEL_ENC=SWAP ID_FS_LABEL_SAFE=SWAP
4.3 通过 blkid 命令
# blkid /dev/sdb5 /dev/sdb5: LABEL="SWAP" UUID="B" TYPE="vfat" 通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。
比如我最后把&/dev/sdb 挂载在了&/data1 目录下(不放心的话重启或者生成文件测试下,看挂载分区的空间被占用没):
可用 已用% 挂载点
0% /dev/shm
grep -v '#' /etc/fstab |column -t
UUID=0c685e8b-dbb3-4a1c-a106-3f1716ab34dd
defaults,noatime
UUID=2d7f1bcf-06d1-486e-87df-404ba670fcd9
defaults,noatime
UUID=248e7a99-b459-4800-bbd3-a2f
defaults,noatime
defaults,nosuid,noexec,nodev
gid=5,mode=620
UUID=870ebaf6-727f-48d3-b60c-fac
defaults,noatime
挂载点必须是一个目录。
一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样,卸载后,目录以前的文件都还在,不会有任何丢失。
目录只占磁盘里的一个inode,存放文件属性等信息。
任何一个分区都必须挂载到某个目录上。
目录是逻辑上的区分。分区是物理上的区分。
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
一个分区可以挂在多个目录,但反过来一个目录只能是一个分区的挂载点。
[1]&Linux入门笔记之一:系统分区及挂载点 &
[2]&挂载点 &
[3]&什么叫“挂载”,“挂载点”?linux文件系统中的概念 &
[4]&Linux文件系统简介 &
[5]&第八章、Linux 磁盘与文件系统管理 &
[6]&/etc/fstab 详解 && & & & &
[7]&如何在CentOS下使用fdisk添加新硬盘 &
[8] 多硬盘分区管理fdisk &
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读linux系统home目录下面的.bashrc 文件内容消失怎么办?
[问题点数:20分]
linux系统home目录下面的.bashrc 文件内容消失怎么办?
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2015年1月 Linux/Unix社区大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。ios之枚举home目录下的文件路径
NSFileManager *
&&& manager =
[NSFileManager defaultManager];
&&& NSString
&&& home = [@"~"
stringByExpandingTildeInPath];//获得主目录路径
NSDirectoryEnumerator *
&&& direnum =
[manager enumeratorAtPath: home];//枚举home下的目录
NSLog(@"home=%@,direnum=%@",home,direnum);
NSMutableArray *
&&& files =
[NSMutableArray arrayWithCapacity:5];
&&& NSString
(filename = [direnum nextObject]) {
if ([[filename pathExtension]
isEqualToString:@"m4r"]){//判断路径的后缀名是否为m4r
[files addObject: filename];
&&& NSEnumerator
&&& fileenum =
[files objectEnumerator];//枚举数组files
(filename = [fileenum nextObject]) {
NSLog (@"%@", filename);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。怎么将home目录下的每个用户每个用户目录打一个
怎么将/home目录下的每个用户(每个用户目录)打一个tar文件?
08-10-20 &匿名提问 发布
一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增) (8)从正文中添加数据到结构体数组中 (9)将所有数据写入文件中 (0)退出程序 二、题目分析 该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。 菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明: 功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。 功能2是显示所有的记录,通过循环输出,格式也比较重要。 功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。 功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。 功能6的算法在5中就已经体现了,输入姓名,一一比较。 功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。 功能8和9是对文件的操作,提前准备好数据。
总体设计一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数) 1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。
2、查询模块:可用stu *lookdata(stu *p1)
来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:可用insert(
)函数来实现。其中通过学号的大小来比较的,并且以此来排序。 4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage()
来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:可用一个函数exit()
学生成绩管理系统 请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统
程序中出现的问题及解决方法 问题一、学生初始信息模块:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。
解决办法及步骤:1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3、输出用于循环检查语句中的学生信息,发现乱码
4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。
问题二、查询模块:可用stu *lookdata(stu *p1)
来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。 问题三、插入模块:可用insert(
)函数来实现。其中通过学号的大小来比较的,并且以此来排序。当我们输入插入信息时,系统却提示插入不进数据。 解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入插入信息看能否插入进去得到所要插入的学生信息以及学生的语文、数学、英语和计算机的成绩。
2、检查当我们在输入插入信息时,看是否我们输入的插入信息有
C语言课程设计报告一、实践的目的和要求加深对《C语言》课程所学知识的理解,进一步巩固C语言讲法规则。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力二、内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、、绘图函数,以及文件的读写操作等三、实践任务1.学生成绩管理系统建立一个5个学生的信息登记表,每个学生和信息包括:学号,姓名,和3门课程的成绩(MATH,C,ENGLISH)。程序运行时显示一个简单的菜单
例如:(1):信息输入(INPUT)(2):显示信息(DISPLAY)(3):总分统计(COUNT)(4):总分排序(SORT)(5):查询(QUERY)其中:(1):对5个学生的信息进行输入;(2):显示当前学生记录的信息,若无记录,则给出提示信息;(3):对每个学生的3门课程统计总分;(4):对5个学生的总分按升序序排序并显示出来;(5):可以按“学号”、“姓名”查询该生的有关信息。总体设计:
总结感想开发一个编译器是一个比较漫长的过程。需要我对每一个模块都深思熟虑,每一个算法都充分理解,每一个数据结构都人身设计。在整个完成课程设计的过程中,我们主要收获了以下的几点经验。1 要学会具体问题具体分析在着手开始编写代码的时候,我已经将教材还有龙书看过一遍了,但是在实际动手的时候,才发现并不是像书上说的那么清楚明白,C语言的特性与书上举例用的语言特性有许多不同,这时就不能生搬硬套书上的算法,要结合C语言的特点,采用书上的思想,这样才能把问题解决。2 设计数据结构的重要性在我编写代码的过程中,最常出现的现象就是反复修改数据结构,甚至在进行优化的时候还回过头去修改中间代码的数据结构。这就导致了我编写代码效率的降低,还有由于数据结构的反复修改,使得整个工程维护起来极其困难。这就说明数据结构的设计在整个设计阶段是十分重要的,没有一个设计良好的数据结构,代码编写阶段就不会顺利的进行。3 交流和沟通我们在开发初期遇到的很多问题都是通过与同学交流和沟通解决的。同学间无私、耐心的讲解不仅让整个课程设计进展顺利,也让我们每一个人都学到了很多。总的来说,这次编译课程设计对我来说真的是受益匪浅,通过这次实践,让我对书本上的知识有了深刻的理解,同时增强了自己的动手能力,更重要的是我学会了一系列处理问题的方法,有穷状态机,语法制导等技术都有非常广的应用范围,还有通过代码优化的学习还让我知道如何让我编写的代码运行效率更高,对我今后的实践工作奠定了基础。编译是一门将程序设计语言、数据结构、算法、计算机体系结构、软件工程等计算机知识紧密结合在一起的学科,它将对我今后的学习和工作产生巨大的帮助。? 注册 | 登录 | 博客首页 | 我的主页 | 帮助 小痞
复制地址 订阅 笑着那些低处的,自以为是着,笑着.我站在不远的前方,笑着那些后方的鼠目寸光着.我并不是自卑得笑了,我只是卑劣的笑着,我也不是自信的笑了,我为我的信仰笑着 首页 日志 个性档案
C语言课程设计总结报告
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。在设计中我们遇到了很多编程问题,最后在谢老师的辛勤指导下,我们慢慢的进入状态,我们做的是一个俄罗斯方块的设计,内容包括很多。运用的函数也是非常的复杂,我们一组有八个人,我们分工合作,首先我们一起完成了结构题,然后我们一人各负责一个函数程序的设计,经过几星期的努力,我们完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我们最大的问题,不过,我们做好后,经过老师的讲解和改错,我们也懂得设计和运用了。同时,也让我知道了,合作的力量,如果是孤军奋战的话,我们也不能在规定时间内完成,最终达到游纫而解。同时在这次课程设计中让我们认识到做程序设计这项工作中我门要具备以下素质:很强的团队精神和协作能力和文档习惯。  良好的文档是正规研发流程中非常重要的环节,缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。  此外编程是一项高精度的工作所以我们要有规范化,标准化的代码编写习惯通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。
我们还要有模块化思维能力  模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作, 学习和总结  善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高,生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过实际动手做,我们才真正领略到“艰苦奋斗”这一词的真正含义,我们想说,编程确实有些辛苦,但苦中也有乐,在这个团队的任务中,一起的工作可以让我们有说有笑,相互帮助,配合默契。对我们而言,知识上的收获重要,精神上的丰收是可喜的。挫折是一份财富,经历是一份拥有。这次实际操作必将成为我们人生旅途上一个非常美好的回忆!同时,在谢老师的身上我们学得到很多实用的知识,在次我们表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
#include&stdio.h&#include &time.h&#include&conio.h& /*清屏*/#include &stdlib.h& /*显示目录*/#include&string.h& #define MAX 80 void input(); /*输入数据函数*/void sort();/*排序数据函数*/void sort1(); void sort2(); void sort3();
void display();/*显示数据函数*/ void display1();void insert(); /*插入数据函数*/void del(); /*删除数据函数*/void average(); /*平均值函数*/void find();/*查找数据函数*/void find1();void find2(); void save(); /*保存数据函数*/void read(); /*读出数据函数*/void del_file();
/*删除文件函数*/void modify(); /*修改文件函数*/int now_no=0; struct student {
char name[20];
char sex[4];
float score1;
float score2;
float score3;
}; struct student stu[MAX],*p; main()/*主函数*/ {
start: printf(&\n\n\n\t\t\t欢迎使用学生成绩管理系统\n&);
printf(&\n\n\n\n\n\n\t\t******************按任意键继续********************&);
ch=getch();
while(!ch);
system(&cls&);
/*一下为功能选择模块*/
printf(&\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员总成绩信息\n\t\t\t\t3.对总成绩排序\n\t\t\t\t4.显示学员单科成绩排序\n\t\t\t\t5.添加学员信息\n\t\t\t\t6.删除学员信息\n\t\t\t\t7.修改学员信息\n\t\t\t\t8.查询学员信息\n\t\t\t\t9.从文件读入学员信息\n\t\t\t\t10.删除文件中学员信息\n\t\t\t\t11.保存学员信息\n\t\t\t\t12.退出\n&);
printf(&\t\t\t\t选择功能选项(输入所选功能前的数字):&);
fflush(stdin);
/*可用可不用,用于清除缓存防止下次用scanf输入是出现错误*/
scanf(&%d&,&as);
switch(as)
case 1:system(&cls&);
case 2:system(&cls&);
display();
case 3:system(&cls&);
case 4:system(&cls&);
display1();
case 5:system(&cls&);
case 6:system(&cls&);
case 7:system(&cls&);
case 8:system(&cls&);
case 9:system(&cls&);
case 10:system(&cls&);
del_file();
case 11:system(&cls&);
case 12:system(&exit&);
default:system(&cls&);
}while(1);/*while(1),1表示真,所以while(1)表示永远循环下去,一般在while(1)的循环体内都有break 或者return 跳出循环*/
/*至此功能选择结束*/ }
void input()/*原始数据录入模块*/ {
printf(&\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n&,i+1);
printf(&\n输入学生编号:&);
scanf(&%d&,&stu[i].no);
fflush(stdin);
printf(&\n输入学员姓名:&);
fflush(stdin);
gets(stu[i].name);
printf(&\n输入学员性别:&);
fflush(stdin);
gets(stu[i].sex);
printf(&\n输入学员成绩1:&);
scanf(&%f&,&stu[i].score1);
printf(&\n输入学员成绩2:&);
fflush(stdin);
scanf(&%f&,&stu[i].score2);
printf(&\n输入学员成绩3:&);
fflush(stdin);
scanf(&%f&,&stu[i].score3);
printf(&\n\n&);
printf(&是否继续输入?(Y/N)&);
fflush(stdin);
ch=getch();
system(&cls&);
while(ch!=&#39;n&#39;&&ch!=&#39;N&#39;);
system(&cls&); } void sort()/*排序数据函数*/ {
average();
for(i=1;i&now_i++)
for(j=1;j&=now_no-i;j++)
if(stu[j-1].ave&stu[j].ave)
temp=stu[j];
stu[j]=stu[j-1];
printf(&排序以完成进入功能2可进行显示\n&);
system(&pause&);
system(&cls&);} void sort1()/*排序数据函数*/ {
for(i=1;i&now_i++)
for(j=1;j&=now_no-i;j++)
if(stu[j-1].score1&stu[j].score1)
temp=stu[j];
stu[j]=stu[j-1];
} } void sort2()/*排序数据函数*/ {
for(i=1;i&now_i++)
for(j=1;j&=now_no-i;j++)
if(stu[j-1].score2&stu[j].score2)
temp=stu[j];
stu[j]=stu[j-1];
} } void sort3()/*排序数据函数*/ {
for(i=1;i&now_i++)
for(j=1;j&=now_no-i;j++)
if(stu[j-1].score3&stu[j].score3)
temp=stu[j];
stu[j]=stu[j-1];
} }void display()/*显示数据函数*/ {
average();
printf(&\t\t\t班级学员信息列表\n&);
printf(&\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n&);
for(i=0;i&now_no&&stu[i].name[0];i++)
printf(&\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
printf(&\t\t按任意键返回主菜单.&);
fflush(stdin);
as=getch();
while(!as);
system(&cls&); }void display1()/*显示数据函数*/{
printf(&\t\t\t班级学员score1成绩排序\n&);
printf(&\t编号\t姓名\t性别\t成绩1\n&);
for(i=0;i&now_no&&stu[i].name[0];i++)
printf(&\t%d\t%s\t%s\t%.2f\t\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score1);
printf(&\t\t\t班级学员score2成绩排序\n&);
printf(&\t编号\t姓名\t性别\t成绩2\n&);
for(i=0;i&now_no&&stu[i].name[0];i++)
printf(&\t%d\t%s\t%s\t%.2f\t\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score2);
printf(&\t\t\t班级学员score3成绩排序\n&);
printf(&\t编号\t姓名\t性别\t成绩3\n&);
for(i=0;i&now_no&&stu[i].name[0];i++)
printf(&\t%d\t%s\t%s\t%.2f\t\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score3);
printf(&\t\t按任意键返回主菜单.&);
fflush(stdin);
as=getch();
while(!as);
system(&cls&); } void insert()/*插入数据函数*/ {
printf(&\n\t\t输入新插入学员队信息\n&);
printf(&\n输入学生编号:&);
scanf(&%d&,&stu[now_no].no);
fflush(stdin);
printf(&\n输入学员姓名:&);
fflush(stdin);
gets(stu[now_no].name);
printf(&\n输入学员性别:&);
fflush(stdin);
gets(stu[now_no].sex);
printf(&\n输入学员成绩1:&);
fflush(stdin);
scanf(&%f&,&stu[now_no].score1);
printf(&\n输入学员成绩2:&);
fflush(stdin);
scanf(&%f&,&stu[now_no].score2);
printf(&\n输入学员成绩3:&);
fflush(stdin);
scanf(&%f&,&stu[now_no].score3);
printf(&\n\n&);
now_no=now_no+1;
printf(&是否继续输入?(Y/N)&);
fflush(stdin);
ch=getch();
system(&cls&);
while(ch!=&#39;n&#39;&&ch!=&#39;N&#39;); } void del()/*删除数据函数*/ {
int inum,i;
printf(&输入要删除学员的编号:&);
fflush(stdin);
scanf(&%d&,&inum);
for(i=0;i&now_i++)
if(stu[i].no==inum)
if(i==now_no)now_no-=1;
stu[i]=stu[now_no-1];
now_no-=1;
system(&cls&); } void save()/*保存数据函数*/ {
char filepath[20];
printf(&输入要保存的文件路径:&);
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,&w&))==NULL)
printf(&\n保存失败!&);
for(i=0;i&now_i++)
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp,&\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
fclose(fp);
printf(&学生信息已保存在%s中!\n&,filepath);
system(&pause&);
system(&cls&); } void find()/*查询函数*/ {
char str[20],
printf(&输入要查询的学生姓名:&);
fflush(stdin);
gets(str);
for(i=0;i&now_i++)
if(!strcmp(stu[i].name,str))
printf(&\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n&);
printf(&\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n&,stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
printf(&\t\t按任意键返回主菜单.&);
fflush(stdin);
as=getch();
while(!as);
system(&cls&); }
void average()/*求平均数*/ {
for(i=0;i&now_i++)
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
} } void modify()/*修改数据函数*/ {
char str[20];
printf(&输入要修改的学生姓名:&);
fflush(stdin);
gets(str);
for(i=0;i&now_i++)
if(!strcmp(stu[i].name,str))
system(&cls&);
printf(&\n\t\t输入新插入学员队信息\n&);
printf(&\n输入学生编号:&);
fflush(stdin);
scanf(&%d&,&stu[i].no);
printf(&\n输入学员性别:&);
fflush(stdin);
gets(stu[i].sex);
printf(&\n输入学员成绩1:&);
fflush(stdin);
scanf(&%f&,&stu[i].score1);
printf(&\n输入学员成绩2:&);
fflush(stdin);
scanf(&%f&,&stu[i].score2);
printf(&\n输入学员成绩3:&);
fflush(stdin);
scanf(&%f&,&stu[i].score3);
printf(&\n\n&);
system(&cls&); }
void read() {
char filepath[20];
printf(&输入要读入的文件路径:&);
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,&r&))==NULL)
printf(&找不到%s文件!\n&,filepath);
system(&pause&);
for(i=0;i&MAX&&!feof(fp);i++)
fscanf(fp,&\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n&,&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave);
fclose(fp);
printf(&保存的在文件%s中的所有信息已经读入!\n&,filepath);
system(&pause&); /*按任意键继续*/
system(&cls&); }
void del_file() {
char filepath[20];
printf(&输入要删除的文件路径:&);
fflush(stdin);
gets(filepath);
fp=fopen(filepath,&w&);
fclose(fp);
printf(&保存的在文件%s中的所有信息已经删除!\n&,filepath);
system(&pause&);
system(&cls&); }仔细看下有你要的东西
请登录后再发表评论!}

我要回帖

更多关于 下午两点是什么时辰 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信