海兵's profilehaibing的共享空间PhotosBlogLists Tools Help

海兵 廖

Occupation
Location
Interests
相知道更多信息,请联系我,哈哈~~
Photo 1 of 109
No list items have been added yet.

haibing的共享空间

February 01

指针的学习。

#include "Head.c"
void main()
{
        printf("现在学习指针与之间值传递方法。\n");
        printf("现在在有五种法子,显示各种功能。\n");
        printf("1、以数组的不同引用形式输出数组各元素的值。\n");
        printf("2、采用指针变量表示的地址法输入输出各元素。\n");
        printf("3、采用数组名表示的地址法输入输出数组条元素。\n");
        printf("4、用指针表示的下标法输入输出数组各元素。\n");
        printf("5、利用指针法输入输出数组各元素。\n");
        printf("0、退出。\n");

        void ArrayRef();
        void FingerAddress();
        void ArrayAddress();
        void FingerSuffix();
        void FingerRef();

        int select ;
        for(;;)
        {
                scanf("%d",&select);

                switch(select)
                {
                        case 0:
                                printf("退出");
                                exit(0);
                                break;

                        case 1:
                                printf("选择得是以数组的不同引用形式输出数组各元素的值。\n");
                                ArrayRef();
                                break;

                        case 2:
                                printf("选择和是采用指针变量表示的地址法输入输出各元素。\n");
                                FingerAddress();
                                break;

                        case 3:
                                printf("选择得是采用数组名表示的地址法输入输出数组条元素。\n");
                                ArrayAddress();
                                break;

                        case 4:
                                printf("选择得是用指针表示的下标法输入输出数组各元素。\n");
                                FingerSuffix();
                                break;

                        case 5:
                                printf("选择得是利用指针法输入输出数组各元素。\n");
                                FingerRef();
                                break;

                        default:
                                break;
                }//End switch();
        }//End for;
}//End main();

void ArrayRef()
{
        int n;
        int a[10];
        int *ptr = a;

        for(n = 0 ; n < 10 ; n++)
        {
                printf("请输入第%d个数:",n+1);
                scanf("%d",&a[n]);
        }//End for;

        printf("1-------output! \n");
        for( n = 0 ; n < 10 ; n++)
        {
                printf("%4d",a[n]);
        }//End for;

        printf("\n");
}//End ArrayRef()

void FingerAddress()
{
        int n;
        int a[10] ;
        int *ptr = a ;          /*定义时对指针变量初始化*/

        for( n = 0 ; n <= 9 ; n++)
        {
                printf("请输入第%d个数:",n+1);
                scanf("%d",ptr + n);
        }//End for;

        printf("现在开始正常输出\n");

        for( n = 0 ; n < 10 ; n++)
        {
                printf("%4d",*(ptr + n));
        }

        printf("\n");
}//End main();

void ArrayAddress()
{
        int n;
        int a[10] ;
        int *ptr = a ;          /*定义时对指针变量初始化*/

        for( n = 0 ; n <= 9 ; n++)
        {
                printf("请输入第%d个数:",n+1);
                scanf("%d",a + n);
        }//End for;

        printf("现在开始正常输出\n");

        for( n = 0 ; n < 10 ; n++)
        {
                printf("%4d",*(a + n));
        }//Enf for;

        printf("\n");
}//End ArrayAddress()

void FingerSuffix()
{
        int n;
        int a[10] ;
        int *ptr = a ;          /*定义时对指针变量初始化*/

        for( n = 0 ; n <= 9 ; n++)
        {
                printf("请输入第%d个数:",n+1);
                scanf("%d",&ptr[n]);
        }//End for;

        printf("现在开始正常输出\n");

        for( n = 0 ; n < 10 ; n++)
        {
                printf("%4d",ptr[n]);
        }//Enf for;

        printf("\n");
}//End FingerSuffix();

void FingerRef()
{
        int n;
        int a[10] ;
        int *ptr = a ;          /*定义时对指针变量初始化*/

        for( n = 0 ; n <= 9 ; n++)
        {
                printf("请输入第%d个数:",n+1);
                scanf("%d",ptr++);
        }//End for;

        printf("现在开始正常输出\n");
        for( n = 0 ; n < 10 ; n++)
        {
                printf("%4d",ptr[n]);
        }//Enf for;
        printf("\n");
}//End FingerRef();

January 31

学生成绩

#include "Head.c"
void main()
{
        int select;
        int i,j;
        int score[5][7];
        int average = 0;
        int sum = 0;

        do{
                printf("本程序有四项功能\n");
                printf("1、根据学号查询学生成绩\n");
                printf("2、根据考试号统计成绩\n");
                printf("3、根据考试号和学号查询成绩\n");
                printf("4、成绩录入\n");
                printf("0、退出\n");
                printf("请选择(0~4):");
                scanf("%d\n",&select);

                switch(select)
                {
                        case 0:
                                printf("OK\n");
                                exit(0);
                                break;
                        case 1:
                                printf("请输入学号:");
                                scanf("%d\n",&i);
                                for(j = 1 ; j < 7 ; j++)
                                {
                                        printf("第%d科成绩是%d\n",j,score[i][j]);
                                        sum += score[i][j];
                                }//End for;

                                average = sum/6;

                                printf("学生的下平均成绩是%d\n",average);
                                break;
                        case 2:
                                printf("输入考试号:");
                                scanf("%d\n",&j);
                                for(j = 1 ; j < 5 ; j++)
                                {
                                        printf("第%d号学生本科成绩是%d\n",i,score[i][j]);
                                        sum += score[i][j];
                                }//End for;

                                average = sum / 4;
                                printf("本科平均成绩是%d\n",average);
                                break;

                        case 3:
                                printf("请输入学号和考试号:\n");
                                scanf("%d,%d\n",&i,&j);
                                printf("第%d号学生的第%d科考试成绩是 %d\n",i,j,score[i][j]);
                                break;

                        case 4:
                                printf("请输入成绩\n");
                                for(i = 1 ; i < 5 ; i++)
                                {
                                        for( j = 1 ; j < 7 ; j++)
                                        {
                                                scanf("%d\n",&score[i][j]);
                                        }//End for;
                                }//End for;
                                break;
                        default:
                                break;
                }//End swtich;
        }while(1);//End do;
}//End main();

程序有些问题,不过是小问题,不会影响到本个程序的运行。

排序 自己选择是从小到小还是从小到大排序。

#include "Head.c"
void main()             /*排序*/
{
        int num[10];
        int i,j;

        void DESC();
        void ASC();

        printf("请输入十个数字。\n");

        for( i = 0 ; i < 10 ; i++)
        {
                printf("请输入第%d个数:", i + 1);
                scanf("%d",&num[i]);
        }//End for;记录刚才输入的十个数。

        printf("请选择倒序(D)、顺序(A)、退出(E)。:");

        char ch='D' ;
        for(;;)
        {
                do{
                        ch = toupper(getchar());                /*获取键盘输入的字符*/
                }while(ch != 'D' && ch != 'A' && ch != 'E');

                switch(ch)
                {
                        case 'D':
                                printf("你输入的是倒序 %c\n",ch);
                                DESC(num);
                                break;
                        case 'A':
                                printf("你输入的是顺序显示 %c\n",ch);
                                ASC(num);
                                break;
                        case 'E':
                                exit(0);
                                break;
                }

        }      
}//End main();

void ASC(int num[])
{
        int i,j;
        int temp;       /*中间存取变量*/
        for(i = 0 ; i < 9 ; i++)                /*开始进行排序操作*/
        {
                for( j = i + 1 ; j < 10 ; j++)
                {
                        if( num[i] > num[j] )
                        {
                                temp = num[i] ;
                                num[i] = num[j] ;
                                num[j] = temp ;
                        }//End if;
                }//End for;
        }//End for;
/*        for(i = 0 ; i < 10 ; i++)
        {
                printf("%d\n",num[i]);
        }//End for;从小到大打印出来。a*/

        void PrintfNumber();

        PrintfNumber(num);
}//End ASC;

void DESC(int num[])
{
        int i,j;
        int temp;       /*中间存取变量*/
        for(i = 0 ; i < 9 ; i++)                /*开始进行排序操作*/
        {
                for( j = i + 1 ; j < 10 ; j++)
                {
                        if( num[i] < num[j] )
                        {
                                temp = num[i] ;
                                num[i] = num[j] ;
                                num[j] = temp ;
                        }//End if;
                }//End for;
        }//End for;
/*        for(i = 0 ; i < 10 ; i++)
        {
                printf("%d\n",num[i]);
        }//End for;从小到大打印出来。a*/

        void PrintfNumber();
        PrintfNumber(num);
}//End DESC;

/*打印出数字来*/
void PrintfNumber(int num[])
{
        int i;
        for(i = 0 ; i < 10 ; i++)
        {
                printf("%d\n",num[i]);
        }//End for;
}//End PrintfNumber();

Head.c 中的内容。
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<ctype.h>       //函数库 toupper;
#include<stdlib.h>       //Exit(0) 函数库;

一个非常简单的文本编辑器

#include "Head.c"
#define MAX 100
#define LEN 10

char text[MAX][LEN];              /*一个非常简单的文本编辑器*/

void main()
{
        register int t,i,j;             /*声明为寄存器变量*/
        for(t=0; t < MAX ; t++)   /*逐行输入字符串* /
        {
                printf("%d:",t);
                gets(text[t]);        /*记录输入的值。*/
                if( !text[t][0])       /*如果是空值返回*/
                {
                        break;
                }//End if;
        }//End for;

        for( i = 0 ; i < t ; i++)     /*按行,逐个字符输出字符串*/
        {
                for( j = 0 ; text[i][j] ; j++)
                {
                        putchar(text[i][j]);
                }//End for;
                putchar('\n');
        }//End for;
}//End main();
---------------------------------------------------------------------------
Head.c中的代码
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<ctype.h>       //函数库 toupper;
#include<stdlib.h>      //Exit(0) 函数库;

January 29

Linux 常用命令集合。

linux目录架构
/根目录
/bin              常用的命令   binary   file   的目錄
/boot             存放系统启动时必须读取的档案,包括核心   (kernel)   在内
/boot/grub/menu.lst     GRUB设置
/boot/vmlinuz           内核
/boot/initrd               核心解壓縮所需   RAM   Disk
/dev                 系统周边设备          
/etc                 系统相关设定文件
/etc/DIR_COLORS           设定颜色
/etc/HOSTNAME           设定用户的节点名
/etc/NETWORKING           只有YES标明网络存在
/etc/host.conf       文件说明用户的系统如何查询节点名
/etc/hosts           设定用户自已的IP与名字的对应表
/etc/hosts.allow       设置允许使用inetd的机器使用  
/etc/hosts.deny       设置不允许使用inetd的机器使用
/etc/hosts.equiv       设置远端机不用密码
/etc/inetd.conf       设定系统网络守护进程inetd的配置
/etc/gateways       设定路由器
/etc/protocols       设定系统支持的协议
/etc/named.boot       设定本机为名字服务器的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0       设置IP
/etc/resolv.conf        设置DNS    
/etc/X11     X   Window的配置文件,xorg.conf   或   XF86Config   這兩個   X   Server   的設定檔
/etc/fstab             记录开机要mount的文件系统
/etc/inittab           设定系统启动时init进程将把系统设置成什么样的runlevel
/etc/issue           记录用户登录前显示的信息
/etc/group           设定用户的组名与相关信息
/etc/passwd           帐号信息
/etc/shadow           密码信息
/etc/sudoers           可以sudo命令的配置文件
/etc/securetty       设定哪些终端可以让root登录
/etc/login.defs       所有用户登录时的缺省配置
/etc/exports           设定NFS系统用的
/etc/init.d/           所有服務的預設啟動   script   都是放在這裡的,例如要啟動或者關閉
/etc/xinetd.d/         這就是所謂的   super   daemon   管理的各項服務的設定檔目錄
/etc/modprobe.conf      内核模块额外参数设定
/etc/syslog.conf           日志设置文件

/home               使用者家目录
/lib                 系统会使用到的函数库
/lib/modules        kernel   的相关模块
/var/lib/rpm        rpm套件安装处  
/lost+found         系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
/mnt                   外设的挂载点
/media              与/mnt类似
/opt                   主机额外安装的软件
/proc                 虚拟目录,是内存的映射
/proc/version       内核版本
/proc/sys/kernel    系统内核功能
/root                 系统管理员的家目录
/sbin                 系统管理员才能执行的指令
/srv                   一些服務啟動之後,這些服務所需要取用的資料目錄
/tmp                   一般使用者或者是正在執行的程序暫時放置檔案的地方
/usr                   最大的目录,存许应用程序和文件
/usr/X11R6:        X-Window目录  
/usr/src:         Linux源代码
/usr/include:        系统头文件
/usr/openwin           存放SUN的OpenWin  
/usr/man           在线使用手册
/usr/bin               使用者可執行的   binary   file   的目錄
/usr/local/bin       使用者可執行的   binary   file   的目錄
/usr/lib               系统会使用到的函数库
/usr/local/lib       系统会使用到的函数库
/usr/sbin             系统管理员才能执行的指令
/usr/local/sbin     系统管理员才能执行的指令
/var               日志文件
/var/log/secure     記錄登入系統存取資料的檔案,例如   pop3,   ssh,   telnet,   ftp   等都會記錄在此檔案中
/var/log/wtmp         記錄登入者的訊息資料,   last
/var/log/messages         幾乎系統發生的錯誤訊息
/var/log/boot.log         記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
/var/log/maillog           紀錄郵件存取或往來(   sendmail   與   pop3   )的使用者記錄
/var/log/cron        記錄   crontab   這個例行性服務的內容
/var/log/httpd,   /var/log/news,   /var/log/mysqld.log,   /var/log/samba,   /var/log/procmail.log
        分別是幾個不同的網路服務的記錄檔

一些常用的基本命令:
uname   -a             查看内核版本              
ls   -al             显示所有文件的属性
pwd                       显示当前路径                
cd   -                 返回上一次目录
cd   ~                 返回主目录
date   s                 设置时间、日期                    
cal                 显示日历           cal   2006
bc                         计算器具                              
man     &   info        帮助手册
locale               显示当前字体          
locale   -a             所有可用字体           /etc/sysconfig/i18n设置文件
LANG=en             使用英文字体                        
sync                   将数据同步写入硬盘                
shutdonw   -h   now   &   half   &   poweroff     关机
reboot               重启                                      
startx     &     init   5       进入图形介面
/work     &   ?work         向上、下查找文档内容
chgrp                 改变档案群组     chgrp   testing   install.log        
chown               改变所属人       chown   root:root   install.log
chmod                 改变属性           chmod   777   install.log           read=4     write=2     execute=1
cp               复制       cp   filename
rm               删除文件     rm   -rf   filename       强制删除文件
rmdir               删除文件夹
mv                 移动         mv   123.txt   222.txt     重命名
mkdir               创建文件夹
touch               创建文件     更新当前时间
cat                   由第一行开始显示           cat   &brvbarmore     分页
nl                     在内容前加行号
more     &     less     一面一面翻动
head   -n   filename    显示第N行内容
tail   -n   filename    显示后N行内容
od                     显示非纯文档
df   -h           显示分区空间
du                 显示目录或文件的大小
fdisk               分区设置         fdisk   -l   /dev/hda     显示硬盘分区状态
mkfs                 建立各种文件系统     mkfs   -t   ext3     /dev/ram15      
fsck                 检查和修复LINUX档案
ln                     硬链接       ln   -s     软件链接
whereis               查找命令
locate                 查找
find                 查找       find   /   -name   "***.*** "
which               查看工具
whoami                 显示当前用户
gcc   -v             查看GCC版本
chattr   +i   filename  禁止删除      
chattr   -i   filename  取消禁止
lsattr                 显示隐藏档属性
updatedb             更新资料库
mke2fs                 格式化       mkfs   -t   ext3  
dd   if=/etc/passwd   of=/tmp/passwd.bak         备份
mount               列出系统所有的分区
mount   -t   iso9660   /dev/cdrom   /mnt/cdrom                       挂载光盘
mount   -t   vfat   /dev/fd0   /mnt/floppy                           挂载软盘
mount   -t   vfat   -o   iocharset=utf8,umask=000   /dev/hda2   /mnt/hda2       挂载fat32分区
mount   -t   ntfs   -o   nls=utf8,umask=000   /dev/hda3   /mnt/hda3             挂载ntfs分区
Linux-NTFS   Project:   http://linux-ntfs.sourceforge.net/
umount   /mnt/hda3             缷载
ifconfig                   显示或设置网络设备
service   network   restart     重启网卡    
ifdown   eth0         关闭网卡
ifup   eth0             开启网卡
clear                 清屏
history             历史记录               !55     执行第55个指令
stty               设置终端         stty   -a
fdisk   /mbr           删除GRUB
at                   僅進行一次的工作排程
crontab               循環執行的例行性命令         [e]编辑,[l]显示,[r]删除任务
&                   后台运行程序         tar   -zxvf   123.tar.gz   &   ---------> 后台运行
jobs                 观看后台暂停的程序       jobs   -l
fg                     将后台程序调到前台       fg   n   ------> n是数字,可以指定进行那个程序
bg                     让工作在后台运行
kill                结束进程         kill   -9   PID           [9]强制结束,[15]正常结束,[l]列出可用的kill信号
ps   aux             查看后台程序      
top                   查看后台程序      
    top -d 2                每两秒更新一次
    top -d 2 -p10604          观看某个PID
        top -b -n 2 >/tmp/top.txt      --> 將top的資訊進行 2 次,然後將結果輸出到/tmp/top.txt        
pstree               以树状图显示程序         [A]以   ASCII   來連接,   [u]列出PID,   [p]列出帐号
killall               要刪除某個服務         killall   -9   httpd
free                 显示内存状态           free   -m     --------> 以M为单位显示
uptime                 显示目前系统开机时间
netstat               显示网络状态         netstat   -tulnp------> 找出目前系統上已在監聽的網路連線及其   PID
dmesg               显示开机信息         demsg   |   more
nice                 设置优先权             nice   -n   -5   vi   &   -----> 用   root   給一個   nice   植為   -5   ,用於執行   vi  
renice                 调整已存在优先权
runlevel             显示目前的runlevel
depmod                 分析可载入模块的相依性
lsmod               显示已载入系统的模块
modinfo               显示kernel模块的信息
insmod                 载入模块
modprobe               自动处理可载入模块
rmmod               删除模块
chkconfig           检查,设置系统的各种服务           chkconfig   --list   -----> 列出各项服务状态
ntsysv               设置系统的各种服务
cpio                 备份文件

压缩命令:
  *.Z      compress       程式壓縮的檔案;  
  *.bz2    bzip2       程式壓縮的檔案;  
  *.gz     gzip       程式壓縮的檔案;  
  *.tar    tar       程式打包的資料,並沒有壓縮過;  
  *.tar.gz tar       程式打包的檔案,其中並且經過   gzip   的壓縮
compress   filename     压缩文件     加[-d]解压     uncompress
gzip   filename           压缩     加[-d]解压     zcat   123.gz   查看压缩文件内容
bzip2   -z   filename   压缩     加[-d]解压       bzcat   filename.bz2     查看压缩文件内容
tar -cvf /home/123.tar /etc     打包,不压缩
tar -xvf 123.tar           解开包
tar -zxvf /home/123.tar.gz             以gzip解压
tar -jxvf /home/123.tar.bz2         以bzip2解压
tar -ztvf /tmp/etc.tar.gz           查看tar内容
cpio -covB > [file &brvbardevice]       份份
cpio -icduv < [file &brvbardevice]      还原
vi一般用法
一般模式          编辑模式                             指令模式
h 左              a,i,r,o,A,I,R,O                      :w           保存
j 下              进入编辑模式                         :w!          强制保存
k 上              dd   删除光标当前行                  :q!          不保存离开
l 右              ndd  删除n行                         :wq!         保存后离开
0 移动到行首      yy   复制当前行                      :e!          还原原始档
$ 移动到行尾      nyy  复制n行                         :w   filename       另存为
H 屏幕最上        p,P  粘贴                            :set nu           设置行号
M 屏幕中央        u    撤消                            :set nonu       取消行号
L 屏幕最下        [Ctrl]+r   重做上一个动作            ZZ           保存离开
G 档案最后一行  [ctrl]+z   暂停退出                :set nohlsearch     永久地关闭高亮显示
/work         向下搜索                             :sp           同时打开两个文档  
?work         向上搜索                             [Ctrl]+w       两个文档设换
gg         移动到档案第一行                     :nohlsearch        暂时关闭高亮显示
认识SHELL
alias                 显示当前所有的命令别名  alias   lm= "ls   -al "  命令别名  unalias   lm   取消命令别名
type                类似which
exprot              设置或显示环境变量
exprot PATH= "$PATH ":/sbin     添加/sbin入PATH路径
echo   $PATH        显示PATH路径
bash                进入子程序
name=yang           设定变量
unset   name             取消变量
echo   $name             显示变量的内容
myname= "$name   its   me "       &       myname= '$name   its   me '           单引号时$name失去变量内容
ciw=/etc/sysconfig/network-scripts/           设置路径
env                 列出所有环境变量
echo   $RANDOM             显示随意产生的数
set                 设置SHELL
PS1='[\u@\h\w\A#\#]\$'    提示字元的設定
[root@linux~]# read [-pt] variable ---读取键盘输入的变量
      參數:
      -p:後面可以接提示字元!
      -t:後面可以接等待的『秒數!』
declare         声明   shell   变量
ulimit  -a           显示所有限制资料
  ls   /tmp/yang && echo "exist" ||echo "not exist"
  意思是說,當ls/tmp/yang執行後,若正確,就執行echo "exist ",若有問題,就執行echo   "not   exist "  
  echo $PATH | cut -d ': ' -f 5    以:为分隔符,读取第5段内容
  export | cut -c 10-20     读取第10到20个字节的内容
  last | grep 'root'        搜索有root的一行,加[-v]反向搜索
  cat /etc/passwd |sort         排序显示
  cat /etc/passwd |wc        显示『行、字数、字节数』
正规表示法
[root@test root]#grep   [-acinv]   '搜尋字串 '   filename
參數說明:
-a:將 binary 檔案以 text 檔案的方式搜尋資料
-c:計算找到 '搜尋字串 '的次數
-i:忽略大小寫的不同,所以大小寫視為相同
-n:順便輸出行號
-v:反向選擇,亦即顯示出沒有   '搜尋字串 '   內容的那一行!
  grep   -n   'the '   123.txt        搜索the字符   -----------搜尋特定字串              
  grep   -n   't[ea]st '   123.txt    搜索test或taste两个字符---------利用   []   來搜尋集合字元
  grep   -n   '[^g]oo '   123.txt     搜索前面不为g的oo-----------向選擇   [^]  
  grep   -n   '[0-9] '   123.txt         搜索有0-9的数字
  grep   -n   '^the '   123.txt       搜索以the为行首-----------行首搜索^
  grep   -n   '^[^a-zA-Z] ' 123.txt    搜索不以英文字母开头
  grep   -n   '[a-z]$ '   123.txt    搜索以a-z结尾的行----------   行尾搜索$
  grep   -n   'g..d '   123.txt        搜索开头g结尾d字符----------任意一個字元   .  
  grep   -n   'ooo* '   123.txt        搜索至少有两个oo的字符---------重複字元   *
sed         文本流编辑器 利用脚本命令来处理文本文件
awd         模式扫描和处理语言
nl   123.txt   |   sed   '2,5d '       删除第二到第五行的内容
diff           比较文件的差异
cmp            比较两个文件是否有差异
patch          修补文件
pr             要打印的文件格式化

帐号管理
/etc/passwd             系统帐号信息
/etc/shadow             帐号密码信息         经MD5   32位加密
                  在密码栏前面加『   *   』『   !   』禁止使用某帐号
/etc/group               系统群组信息
/etc/gshadow
newgrp                 改变登陆组
useradd & adduser    建立新用户     --------->   useradd   -m   test     自动建立用户的登入目录
                        useradd   -m   -g   pgroup   test   ---------> 指定所属级
/etc/default/useradd      相关设定
/etc/login.defs            UID/GID   有關的設定
passwd             更改密码   ----------->   passwd   test
usermod           修改用户帐号
userdel           删除帐号   -----------> userdel   -r   test
chsh              更换登陆系统时使用的SHELL   [-l]显示可用的SHELL;[-s]修改自己的SHELL
chfn            改变finger指令显示的信息
finger             查找并显示用户信息
id            显示用户的ID   ----------->id   test
groupadd           添加组
groupmod           与usermod类似
groupdel           删除组
su   test         更改用户       su   - 进入root,且使用root的环境变量
sudo               以其他身份来执行指令
visudo           编辑/etc/sudoers  加入一行『   test   ALL=(ALL)   ALL   』
                      %wheel   ALL   =   (ALL)   ALL                               系统里所有wheel群组的用户都可用sudo
                      %wheel   ALL   =   (ALL)   NOPASSWD:   ALL           wheel群组所有用户都不用密码NOPASSWD
              User_Alias   ADMPW   =   vbird,   dmtsai,   vbird1,   vbird3                   加入ADMPW组
              ADMPW   ALL   =   NOPASSWD:   !/usr/bin/passwd,   /usr/bin/passwd   [A-Za-z]*,   \
              !/usr/bin/passwd   root             可以更改使用者密码,但不能更改root密码   (在指令前面加入   !   代表不可)
PAM   (Pluggable   Authentication   Modules,   嵌入式模組)
who   &   w        看谁在线                                          
last               最近登陆主机的信息
lastlog           最近登入的時間         读取   /var/log/lastlog  
talk              与其他用户交谈
write             发送信息         write   test       [ctrl]+d   发送
mesg              设置终端机的写入权限         mesg   n   禁止接收           mesg   y  
wall               向所有用户发送信息         wall   this   is   q   test
mail               写mail      
/etc/default/useradd         家目录默认设置
quota           显示磁盘已使用的空间与限制
quota   -guvs   -----> 秀出目前   root   自己的   quota   限制值
quota   -vu       查询
quotacheck       检查磁盘的使用空间与限制
quotacheck   -avug  -----> 將所有的在   /etc/mtab   內,含有   quota   支援的   partition   進行掃瞄 [-m]   强制扫描    
quota一定要是独立的分区,要有quota.user和quota.group两件文件,在/etc/fstab添加一句:
/dev/hda3   /home   ext3   defaults,usrquota,grpquota   1   2
chmod   600   quota*                   设置完成,重启生效
edquota         编辑用户或群组的quota     [u]用户,[g]群组,[p]复制,[t]设置宽限期限  
edquota   -a   yang
edquota   -p   yang   -u   young   -----> 复制        
quotaon         开启磁盘空间限制
quotaon -auvg     ---> 啟動所有的具有   quota   的   filesystem
quotaoff       关闭磁盘空间限制
quotaoff   -a  ---> 關閉了  
quota       的限制
repquota   -av     查閱系統內所有的具有   quota   的   filesystem   的限值狀態
Quota   從開始準備   filesystem   的支援到整個設定結束的主要的步驟大概是:
1、設定   partition   的   filesystem   支援   quota   參數:
由於   quota   必須要讓   partition   上面的   filesystem   支援才行,一般來說,   支援度最好的是   ext2/ext3   ,
其他的   filesystem   類型鳥哥我是沒有試過啦!   啟動   filesystem   支援   quota   最簡單就是編輯   /etc/fstab   ,
使得準備要開放的   quota   磁碟可以支援   quota   囉;
2、建立   quota   記錄檔:
剛剛前面講過,整個   quota   進行磁碟限制值記錄的檔案是   aquota.user/aquota.group,  
要建立這兩個檔案就必須要先利用   quotacheck   掃瞄才行喔!
3、編輯   quota   限制值資料:
再來就是使用   edquota   來編輯每個使用者或群組的可使用空間囉;
4、重新掃瞄與啟動   quota   :
設定好   quota   之後,建議可以再進行一次   quotacheck   ,然後再以   quotaon   來啟動吧!

开机流程简介
1、載入   BIOS   的硬體資訊,並取得第一個開機裝置的代號;  
2、讀取第一個開機裝置的   MBR   的   boot   Loader   (亦即是   lilo,   grub,   spfdisk   等等)   的開機資訊;  
3、載入   Kernel   作業系統核心資訊,   Kernel   開始解壓縮,並且嘗試驅動所有硬體裝置;  
4、Kernel   執行   init   程式並取得   run-level   資訊;  
5、init   執行   /etc/rc.d/rc.sysinit   檔案;  
6、啟動核心的外掛模組   (/etc/modprobe.conf);  
7、init   執行   run-level   的各個批次檔(   Scripts   );  
8、init   執行   /etc/rc.d/rc.local   檔案;  
9、執行   /bin/login   程式,並等待使用者登入;  
10、登入之後開始以   Shell   控管主機。  
在/etc/rc.d/rc3.d內,以S开头的为开机启动,以K开头的为关闭,接着的数字代表执行顺序
GRUB   vga设定
彩度\解析度     640x480     800x600     1024x768     1280x1024       bit  
        256                 769             771             773               775             8   bit  
      32768               784             787             790               793           15   bit  
      65536               785             788             791               794           16   bit  
      16.8M               786             789             792               795           32   bit  

./configure         检查系统信息
./configure --help | more     帮助信息
make   clean         清除之前留下的文件
make                 编译
make   install       安装
rpm   -q         -----> 查询是否安装
rpm   -ql       -----> 查询该套件所有的目录
rpm   -qi       -----> 查询套件的说明资料
rpm   -qc[d]       -----> 设定档与说明档
rpm   -ivh     -----> 安装
rpm   -V         -----> 查看套件有否更动过
rpm   -e         -----> 删除
rpm   -Uvh       -----> 升级安装    
--nodeps       -----> 强行安装
--test       -----> 测试安装

January 18

昨天订机票啦!!!!!

昨天真冷呀,机票是同事订的他是樟树的.

本来是星期一中午打过去

可是对方只有招行及工行的卡,取了钱可是到邮政那说办不了

于打电话给同事那同学,说明天可不可以,他同学说行。

昨天下雪了,中午骑着自行车帽着雪去给他同学打钱

一个字--冷。

长这么大,第一次感觉到冷就是昨天了,回来的时候两只手都快动不了一。

手指冻得像香肠一样,都快发紫了。

不过工行真不像话,它们11:30~1:00之间休息,我12:20到。

在外面一直等到一点才让进去。

还不能在里面等

那时刻想,我以后一定不会在工行开户的。

打完钱就回去了,两个打了5800元

January 05

今天去中华世纪坛玩啦

昨天晚上说好了十点在去中华世纪坛玩的,我起来的较早九点二十分钟左右就到公司里来了。

等到了十点的时候白杰及聂小明还没有来,我还以为他们俩明天说话不算数不去了呢。

等到了十点十六的时候他们俩个来了,然后在公司里坐了一会儿说去中华世纪坛。

先从坐三九二到朝凤俺村然后换做三四五到积水潭下再坐地铁二号线进站到一号线的军事博物馆出来往西走一点,就能看到了。

听程志勇说去中华世纪坛不用花可是不是,成人三十一张。

我们没有进去只好在外面看看,然后在那里照了几张相片。

在旁边转了转,转到一个地方,那里有好多的人在那里,其中有一些人手里拿着一支大的那个毛笔字的在地上写字。

有一个老大爷写的真不错,他说他没事的时候就到这里来写写字,旁边的人说这大爷上过CCTV还有旁边那个四十左右的青年人也上过。

我也拿了老大爷的那个大的毛笔字在地上写了三个字“理由”、“静”。

那个写起来有点重,写起来有点费劲。

然后在那里听那老大爷说了一些关于书法方的知识,一时也没有记住多少,哈哈~~。

然后时间还早可是又不知道去哪儿,说去动物园吧,后来又不去了,又在旁边转了转就回家了。

回到昌平在一家饺子点吃了些饺子,三个人要了一斤,三碗稀饭,一盘菜,花了四十八元。

白杰说他一个人吃半斤饺子的时候那服务员有点吃惊,转在一边笑,最后我们三个人要了一斤,吃到完饭剩了三个饺子吃不了了。

三个饺子一块钱。

吃完饭去商店里逛了一圈,聂小明说要买外套什么的,可是每次说去超市买外套,可是每次都没有买成。

那小了真是光逛不花钱的那种呀。

在超市里逛了一圈什么都没有买回来了。

一日游完~~~。

December 28

北京的第二场雪--小雪

这场雪没有前一场雪大,太小了,连一张煎饼厚都没有。

有点失望呀,看老毛写的那北国冰封,万里雪飘怎么来到这边几年了

可没有一年下的雪有如些的气魄。

December 22

今天参加老乡聚会--新余

非常高兴今天去了、在这里见好多新余的同胞,有帅哥,有美女,虽然有好多的人的名字都不认识,但是这至少在外面有这么多新余人说新余话,真的好开心。

这是我来北方四年半以来第一次老乡聚会,一开始是我们高中同学三人先在一起然后我们三个人一起双榆树宾馆那儿的。

我们十一点在清华大学西门见面,我第一个到十点过四分,然后我就自己一个人先去清华大学里逛的,后来章萍是十一点过三分到的,最后是刘荣彬快十二点了。在清华大学里找一个吃饭的地方,吃完了时间大概是十二点四十,然后 我们公交320到人民大学下的车,一起去找到双榆树宾馆里。

到那里先进行签到每一个人是六十元,然后邻一张四方的纸条,上面有一个号我们三个在一个组红5-我,7-章萍,9-刘荣彬。

接着刘荣彬给我和章萍介绍了一个人,好像是叫杨虎吧,他是良山的。他在一家德国的外资企业上班,好像他是做测试的,跟他在一起聊了一会,主要是章萍想找一个测试的工作,刘荣彬给她引见一下。

接下来是开住京办事处的领导说话,由于我的技术不到位没有那数码相机不太会使,录的那些都没有存取下来有点可惜了。

住京办事处的领导说完之后就开始游戏啦,中间每个组都照了相,全体成员在双榆树宾馆的门口照了一个集体合影。

由于明天要进行测试,还有一些事没有准备好,所以提前走了。没有在那里吃饭,不过在北京能见到这么新余人还是挺开心的。

个子个久里没有见到个么多人在一起哇新余话。

December 19

哈哈!我们组乒乓球联赛我得一球拍

我们组五个人,我、白杰、张军(组长)、沈克涛、程智勇。

我是两胜有负

我-白杰   3:0
我-张军(组长)1:3
我-沈克涛 3:0
我-程智勇  2:3

张军是四战全胜,本来是他的,但是他说不要,我和沈克涛一人一只球拍。

打得挺爽的。

December 02

经部-->仪礼-->士昏礼第二

士昏礼第二    昏礼。下达。纳采,用雁。主人筵于户西,西上,右几。使者玄端至。摈者出请事,入告。主人如宾服,迎于门外,再拜,宾不答拜。揖入。至于庙门,揖入;三揖,至于阶,三让。主人以宾升,西面。宾升西阶。当阿,东面致命。主人阼阶上北面再拜;授于楹间,南面。宾降,出。主人降,授老雁。摈者出请。宾执雁,请问名,主人许。宾入,授,如初礼。摈者出请,宾告事皆。入告,出请醴宾。宾礼辞,许。主人彻几,改筵,东上。侧尊甒醴于房中。主人迎宾于庙门外,揖让如初,升。主人北面,再拜,宾西阶上北面答拜。主人拂几授校,拜送。宾以几辟,北面设于坐,左之,西阶上答拜。赞者酌醴,加角柶,面叶,出于房。主人受醴,面枋,筵前西北面。宾拜受醴,复位。主人阼阶上拜送。赞者荐脯醢。宾即筵坐,左执觯,祭脯醢,以柶祭醴三,西阶上北面坐,啐醴,建柶,兴,坐奠觯,遂拜。主人答拜。宾即筵,奠于荐左,降筵,北面坐取脯;主人辞。宾降,授人脯,出。主人送于门外,再拜。

    纳吉用雁,如纳采礼。

    纳征:玄纁束帛,俪皮。如纳吉礼。

    请期,用雁。主人辞。宾许,告期,如纳征礼。

    期,初昏,陈三鼎于寝门外东方,北面,北上。其实特豚,合升,去蹄。举肺脊二、祭肺二、鱼十有四、腊一肫。髀不升。皆饪。设扃鼏。设洗于阼阶东南。馔于房中:醯酱二豆,菹醢四豆,兼巾之:黍稷四敦,皆盖。大羹湆在爨。尊于室中北墉下,有禁,玄酒在西,绤幂,加勺,皆南枋。尊于房户之东,无玄酒,篚在南,实四爵合卺。

    主人爵弁,纁裳缁袘。従者毕玄端。乘墨车,従车二乘,执烛前马。妇车亦如之,有礻炎。至于门外。主人筵于户西,西上,右几。女次,纯衣纁袡,立于房中,南面。姆纚笄宵衣,在其右。女従者毕袗玄,纚笄,被纚黼,在其后。主人玄端迎于门外,西面再拜,宾东面答拜。主人揖入,宾执雁従。至于庙门,揖入。三揖,至于阶,三让。主人升,西面。宾升,北面,奠雁,再拜稽首,降,出。妇従,降自西阶。主人不降送。婿御妇车,授绥,姆辞不受。妇乘以几,姆加景,乃驱。御者代。婿乘其车先,俟于门外。

    妇至,主人揖妇以入。乃寝门,揖入,升自西阶,媵布席于奥。夫入于室,即席,妇尊西,南面。媵御沃盥交。赞者彻尊幂。举者盥,出,除{曰鼎},举鼎入,陈于阼阶南,西面,北上。匕俎従设,北面载,执而俟。匕者逆退,复位于门东,北面,西上。赞者设酱于席前,菹醢在其北。俎入,设于豆东。鱼次。腊特于俎北。赞设黍于酱东,稷在其东。设湆于酱南。设对酱于东,菹醢在其南,北上。设黍于腊北,其西稷。设湆于酱北。御布对席,赞启会,却于敦南,对敦于北。赞告具。揖妇,即对筵,皆坐。皆祭,祭荐、黍、稷、肺。赞尔黍,授肺脊,皆食,以湆酱,皆祭举、食举也。三饭,卒食。赞洗爵,酌酳主人,主人拜受,赞户内北面答拜。酳妇亦如之。皆祭。赞以肝従,皆振祭。哜肝,皆实于菹豆。卒爵,皆拜。赞答拜,受爵,再酳如初,无従,三酳用卺,亦如之。赞洗爵,酌于户外尊,入户,西北面奠爵,拜。皆答拜。坐祭,卒爵,拜。皆答拜。兴。主人出,妇复位。乃彻于房中,如设于用室,尊否。主人说服于房,媵受;妇说服于室,御受。姆授巾。御衽于奥,媵衽良席在东,皆有枕,北止。主人入,亲说妇之缨。烛出。媵馂主人之余,御馂妇余,赞酌外尊酳之。媵侍于户外,呼则闻。

    夙兴,妇沐浴,纚笄、宵衣以俟见。质明,赞见妇于舅姑。席于阼,舅即席。席于房外,南面,姑即席。妇执枣、栗,自门入,升自西阶,进拜,奠于席。舅坐抚之,兴,答拜。妇还,又拜,降阶,受腶脩,升,进,北面拜,奠于席。姑坐举以兴,拜,授人。

    赞醴妇。席于户牖间,侧尊甒醴于房中。妇疑立于席西。赞者酌醴,加柶,面枋,出房,席前北面。妇东面拜受。赞西阶上北面拜送。妇又拜。荐脯醢。妇升席,左执觯,右祭脯醢,以柶祭醴三,降席,东面坐,啐醴,建柶,兴,拜。赞答拜。妇又拜,奠于荐东,北面坐取脯;降,出,授人于门外。

    舅姑入于室,妇盥馈。特豚,合升,侧载,无鱼腊,无稷。并南上。其他如取女礼。妇赞成祭,卒食,一酳,无従。席于北墉下。妇撤,设席前如初,西上。妇馂,舅辞,易酱。妇馂姑之馔,御赞祭豆、黍、肺、举肺、脊,乃食,卒。姑酳之,妇拜受,姑拜送。坐祭,卒爵,姑受,奠之。妇撤于房中,媵御馂,姑酳之,虽无娣,媵先。于是与始饭之错。

    舅姑共飨妇以一献之礼。舅洗于南洗,姑洗于北洗,奠酬。舅姑先降自西阶,妇降自阼阶。归妇俎于妇氏人。

    舅飨送者以一献之礼,酬以束锦。姑飨妇人送者,酬以束锦。若异邦,则赠丈夫送者以束锦。

    若舅姑既没,则妇入三月,乃奠菜。席于庙奥,东面,右几。席于北方,南面。祝盥,妇盥于门外。妇执菜,祝帅妇以入。祝告,称妇之姓,曰:“某氏来妇,敢奠嘉菜于皇舅某子。”妇拜扱地,坐奠菜于几东席上,还,又拜如初。妇降堂,取菜,入,祝曰:“某氏来妇,敢告于皇姑某氏。”奠菜于席,如初礼。妇出,祝阖牖户。老醴妇于房中,南面,如舅姑醴妇之礼。婿飨妇送者丈夫、妇人,如舅姑飨礼。

    记士昏礼,凡行事必用昏昕,受诸祢庙,辞无不腆,无辱。挚不用死,皮帛必可制。腊必用鲜,鱼用鲋,必殽全。女子许嫁,笄而醴之,称字。祖庙未毁,教于公宫,三月。若祖庙已毁,则教于宗室。问名。主人受雁,还,西面对。宾受命乃降。祭醴,始扱一祭,又扱再祭。宾右取脯,左奉之;乃归,执以反命。纳征:执皮,摄之,内文;兼执足,左首;随入,西上;参分庭一,在南。宾致命,释外足,见文。主人受币,士受皮者自东出于后,自左受,遂坐摄皮。逆退,适东壁。

    父醴女而俟迎者,母南面于房外。女出于母左,父西面戒之,必有正焉。若衣,若笄,母戒诸西阶上,不降。妇乘以几,従者二人坐持几,相对。妇入寝门,赞者彻尊幂,酌玄酒,三属于尊,弃余水于堂下阶间,加勺。,缁被纁里,加于桥。舅答拜,宰彻。

    妇席荐馔于房。飨妇,姑荐焉。妇洗在北堂,直室东隅;篚在东,北面盥。妇酢舅,更爵,自荐;不敢辞洗,舅降则辟于房;不敢拜洗。凡妇人相飨,无降。

    妇入三月,然后祭行。

    庶妇,则使人醮之。妇不馈。

    昏辞曰:“吾子有惠,贶室某也。某有先人之礼,使某也请纳采。”对曰:“某之子舂愚,又弗能教。吾子命之,某不敢辞。”致命,曰:“敢纳采。”

    问名,曰:“某既受命,将加诸卜,敢请女为谁氏?”对曰:“吾子有命,且以备数而择之,某不敢辞。”

    醴,曰:“子为事故,至于某之室。某有先人之礼,请醴従者。”对曰:“某既得将事矣,敢辞。”“先人之礼,敢固以请。”“某辞不得命,敢不従也?”

    纳吉,曰:“吾子有贶命,某加诸卜,占曰‘吉’。使某也敢告。”对曰:“某之子不教,唯恐弗堪。子有吉,我与在。某不敢辞。”

    纳征,曰:“吾子有嘉命,贶室某也。某有先人之礼,俪皮束帛,使某也请纳征。”致命,曰:“某敢纳征。”对曰:“吾子顺先典,贶某重礼,某不敢辞,敢不承命?”

    请期,曰:“吾子有赐命,某既申受命矣。惟是三族之不虞,使某也请吉日。”对曰:“某既前受命矣,唯命是听。”曰:“某命某听命于吾子。”对曰:“某固唯命是听。”使者曰:“某使某受命,吾子不许,某敢不告期?”曰某日。对曰:“某敢不敬须?”

    凡使者归,反命,曰:“某既得将事矣,敢以礼告。”主人曰:“闻命矣。”

    父醮子,命之,曰:“往迎尔相,承我宗事。勖帅以敬,先妣之嗣。若则有常。”子曰:“诺。唯恐弗堪,不敢忘命。”

    宾至摈者请,对曰:“吾子命某,以兹初昏,使某将,请承命。”对曰:“某固敬具以须。”

    父送女,命之曰:“戒之敬之,夙夜毋违命!”母施衿结帨,曰:“勉之敬之,夙夜无违宫事!”庶母及门内,施鞶,申之以父母之命,命之曰:“敬恭听,宗尔父母之言。夙夜无愆,视诸衿鞶!”婿授绥,姆辞曰:“未教,不足与为礼也。”

    宗子无父,母命之。亲皆没,己躬命之。支子,则称其宗。弟,则称其兄。

    若不亲迎,则妇入三月,然后婿见,曰:“某以得为外昏姻,请觌。”主人对曰:“某以得为外昏姻之数,某之子未得濯溉于祭祀,是以未敢见。今吾子辱,请吾子之就宫,某将走见。”对曰:“某以非他故,不足以辱命,请终赐见。”对曰:“某得以为昏姻之故,不敢固辞,敢不従!”主人出门左,西面。婿入门,东面,奠挚,再拜,出。摈者以挚出,请受。婿礼辞,许,受挚,入。主人再拜受,婿再拜送,出。见主妇,主妇阖扉,立于其内。婿立于门外,东面。主妇一拜。婿答再拜,主妇又拜,婿出。主人请醴,及揖让入。醴以一献之礼。主妇荐,奠酬,无币。婿出,主人送,再拜。

July 23

导入Excel


   #region
   string CompanyId = this.GetCompanyID;
   foreach(string  d  in   Directory.GetFileSystemEntries(Server.MapPath ("../../files/")))  
   {  
    if(File.Exists(d))  
     File.Delete(d);//直接删除其中的文件 
    
   } 
   string path=this.filepath .PostedFile .FileName ;
   string mpath=Server.MapPath ("../../File/");
   string mfilename=path.Substring (path.LastIndexOf ("\\"));
   string realpath=Server.MapPath ("../../files/")+mfilename;
   try
   {              
    this.filepath .PostedFile .SaveAs (realpath);
   }
   catch
   {
    this.OutMessage("上传失败!");
   }
   string strline;
   string [] aryline;
   #endregion
   System.IO.StreamReader mysr = new System.IO.StreamReader(realpath);
   int j=0;
   while((strline = mysr.ReadLine()) != null)
   {     
    if(j>0)
    {     
     aryline = strline.Split(new char[]{','});
     zhuanjia.BLL.BS_dSaleBill dsb = this.GetDSaleBill;
     zhuanjia.Model.BS_dSaleBill dsbm = new zhuanjia.Model.BS_dSaleBill();
     dsbm.sBillNo  =this.txtsBillNo .Text ;
     dsbm.CompanyId  = CompanyId;
     dsbm.GoodsId =aryline[0].ToString ();
     dsbm.SaleFmt = aryline[1].ToString();
     dsbm.GoodsFmt = aryline[2].ToString();
     dsbm.Qty = decimal.Parse( aryline[3].ToString() );
     dsbm.NoTaxPrice = decimal.Parse( aryline[4].ToString() );
     dsbm.TaxRate = decimal.Parse( aryline[5].ToString() );
     dsbm.Price = decimal.Parse( aryline[6].ToString() );
     dsbm.iPrice = decimal.Parse( aryline[7].ToString() );
     dsbm.DiscountRate = decimal.Parse( aryline[8].ToString() );
     dsbm.Amount = decimal.Parse( aryline[9].ToString() );
     dsbm.StorePos = aryline[10].ToString();
     dsbm.SaleType = aryline[11].ToString();
     dsbm.PriceType = aryline[12].ToString();
     dsbm.CustCode = aryline[13].ToString();
     dsb.Add(dsbm);
    }
    j++;
   }
   this.DataBinderDataGriddSaleBill();
   this.OutMessage("上传成功。");
  } 

导出Excel

   string CompanyId = this.GetCompanyID ;
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
   SqlDataAdapter da=new SqlDataAdapter("select * from BS_dSaleBill where CompanyId='"+CompanyId+"' and sBillNo='"+this.txtsBillNo .Text +"'",conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"Sheet1");
   DataTable dt=ds.Tables["Sheet1"];
   StringWriter sw=new StringWriter();
   sw.WriteLine("商品编码,销售规格,包装规格,销售数量,不含税价格,税率,含税价格,进价,扣率,小计金额,仓位,销售类型,价格类型,店内码");//,数量(辅单位),辅单位,主单位,数量(主单位),主单位价格,辅单位价格,货位");
   foreach(DataRow dr in dt.Rows)
   {
    sw.WriteLine(dr[2]+","+dr[3]+","+dr[4]+","+dr[6]+","+dr[7]+","+dr[8]+","+dr[9]+","+dr[10]+","+dr[14]+","+dr[15]+","+dr[17]+","+dr[18]+","+dr[19]+","+dr[21]);
   }
   sw.Close();
   Response.AddHeader("Content-Disposition", "attachment; filename="+this.txtsBillNo .Text +".csv");
   Response.ContentType = "application/ms-excel";
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
   Response.Write(sw);
   Response.End();
July 22

今天去高中同学那里逛了一下.

今天去高中同学那里逛了一下. 
 
在北京目前只有我们两个人在这里混呢,其他同学大部分大深圳及南昌这边吧.
 
今天上午天气阴,座628下机,不知东南西北,走了点湾路,哈哈
 
不过今天还是挺开心的.
December 22

在人力资源树当中,上级对下级员工信息查看修改操作。

人力资源
在一个树型结构当中,存在对下属员工进行操作,如修改员工的信息等.
员工表字段 EmployeeId PerantId LoginName Name ...
例如
A  ——————————————————————1
   A_1  ————————————————————2
   A_2
   A_3
            A_3_1 —————————————————3
            A_3_2
            A_3_3
            A_3_4
   A_4(B)
            A_4_1(C)
                      A_4_1_1( D)   ———————————4
                                     A_4_1_1_1(E) ———————5
            A_4_2
            A_4_3
            A_4_4
。。。。
现在 A 有权力下面所有人进行修查看操作。
而 A_4 的权限只能查看,他下面员工的信息,不能查看A_3、A_2、A_1 的信息及他们各自的下属的信息。
现在 B  员工要对 E 员工进行修改,可是数据库里又没对 B 员工修改下面员工 E 的权限。
如果对 B 进行权限设置,他就得对它下面所有每个员工进行权限分配,这样的话权限表就会非常大了。
最底一层(N)就可以有N-1个人有对他修改的权限,这样不好。
如果要 E 的内容可以由 D、C、B、A 这些人才可以修改,其他人就不行了
要实现 B 有没有对 E 员工进行修改的权限,由两种法子(我认为)
第一就是通过算法,把 B 下属员工全部取出来,然后看 E  在没有在里头。
第二就是通过算法,我把有修改 E 用户信息的员工取一个,跟 B 进行比较是不是到了
如果没有再从 E 的上级的上级取出来跟 B 进行比较,依此类推如果 B  没有的话,它最多取 N-1 次

private static string connectionString = ConfigurationManager.ConnectionStrings["WaterOfficeConnectionString"].ToString();
private static SqlConnection getSqlConnection()
{
    SqlConnection cn = new SqlConnection();
    cn.ConnectionString = connectionString;
    cn.Open();
    return cn;
}
private static SqlCommand getSqlCommand()
{
    SqlConnection cn = getSqlConnection();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = cn;
    return cmd;
}
private static object ExecuteScalar(string executeString)
{
    object obj = null;
    SqlCommand cmd = getSqlCommand();
    try
    {
        cmd.CommandText = executeString;
        obj = cmd.ExecuteScalar();
    }
    finally
    {
        cmd.Connection.Close();
    }
    return obj;
}
private int employeeID(string userName)
{
    string sqlString = "select EmployeeId from employee where LoginName  = '" + userName + "'";
    int  userNameId = int.Parse(ExecuteScalar(sqlString).ToString());
    return userNameId;
}
private static int _pId;
/// <summary>
/// 员工上一级的ID号
/// </summary>
private static int pId
{
 get { return _pId; }
}
/// <summary>
/// 员工上一级的ID号
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
private static int ParentID(int pid)
{
    int parentId;
    string sqlString = "select ParentId,isDel from employee where EmployeeID = " + pid;
    SqlCommand cmd = getSqlCommand();
    cmd.CommandText = sqlString ;
    SqlDataReader sdr = cmd.ExecuteReader();
    if (!sdr.Read())
    {
        return -404;
    }
    parentId = sdr.GetInt32(0);
    _isDel = sdr.GetBoolean(1);
    if (parentId == 0 || _isDel == false)
    {
        _pId = parentId;
    }
    sdr.Close();
    cmd.Connection.Close();
    return parentId;
}
/// <summary>
/// 判断是不是相同,如果员工的上级ID与此管理员ID相同就为 true
/// </summary>
/// <param name="number1">管理员ID</param>
/// <param name="number2">上一级的ID</param>
/// <returns></returns>
private bool isExist(int number1, int number2)
{  
    if (number1 == number2)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/// <summary>
/// 看看是不是这个员工的上级员工ID号
/// </summary>
/// <returns></returns>
private bool isEmployeeParentId()
{
    int userId1 = employeeID("userName1") ;
    int userId2 = employeeID("userName2");
    int parId = ParentID(userId1);
    bool temp = true;
    while (!isExist(userId2, parId))
    {
        if (pId == 0 || parId == -404)
        {
            temp = false;
            break;
    }
    parId = ParentID(parId);
    }
    return  temp;
}

我只想到这种法子,第一种的实现我觉得好难,写不出来。
我想一定还会有再好的算法。
代码只供参考,可以跟据自己情况进行修改。
October 04

XMLHttpRequest 方法和属性

                 方法                           描述

abort()                                                   停止当前请求
getAllResponseHeaders()                           把HTTP请求所有响应首部作为键/值对返回
open("method","URL")                               建立对服务器的调用,method 参数可以是GET,POST或PUT,url参数可是相对URL或绝对
                                                            URL,这个访求还包括三个可选的参数
send(content)                                         向服务器发送请求
setRequestHeader("header","value")             把指定首部设置为所提供的值,在设置任何首部之前必须调用opne() 


                 属性                           描述
onreadystatechange                                 第个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数
readyState                                             请求的状态,有五个可取值:0=未初始化,1=正在加载,2=已加载,
                                                            3=交互中,4=完成
responseText                                           服务器的响应,表示为一个串
responseXML                                           服务器的响应,表示为了XML,这个对象可以解析为一个DOM对象
status                                                    服务器的HTTP状态码(200对应OK,404对应Not Found(未找着),等等)
statusText                                              HTTP状态码的相应文件(OK或Not Found(未找着)等等)

September 29

这是一个完整的XMLHttpRequest对象

function createXMLHttpRequest()
{
    xmlHttp = false
    if(window.XMLHttpRequest)//开始初始化XMLHttpRequest对象//Mozilla浏览器
    {
        xmlHttp = new XMLHttpRequest();
        if(xmlHttp.overrideMimeType) //设置Mime类别
        {          
            xmlHttp.overrideMimeType("text/xml");
        }
    }
    else if(window.ActiveXObject)
    {
        try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xmlHttp = new ActiveXObject("Micosoft.XMLHTTP");
            }
            catch(e)
            {
            }
        }
    }
    if(!xmlHttp)
    {
        //异常,创建实例失败
        window.alert("不能创建XMLHttpRequest对象实例");
        return false;
    }
}
September 28

CrystalDecisions.CrystalReporst.Engine.ReportDocument 的类型初始化值没有设定引发异常

解决方法如下:
vs2005中的crystalReport客户端分发
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports
CRRedist2005_x86.msi
在客户端运行上面的文件即可
September 24

笔记--提高Web性能

A:尽可能的使用存储过程
B:对查询的内容最好是进行分页显示
    当查询的数据量较大时,使用分页显示(用户的页面要显示几条,可以让用户自己设置,然后返回其结果)
C:使用连接池请求
    调用完之后得销毁掉.close();
D:使用用WEB缓存技术
    在WEB.CONFIG里设置,然后在每而进行用户就可以了
           有平滑缓存
    固定缓存--过一段时间之后就把缓存清空掉
F:JZP压缩请求
    IIS6.0支持JZP压缩技术
G:EMAIL最好是在服务器不忙的时候发送给注册用户
    主要是用在用户注册完之后,先让用户能进入论坛或社区,然后再发一封EMAIL给予祝贺.
 

以上都是可以提高的WEB必然的小技巧。
September 23

创建一个简单的 XMLHttpRequest() 对象

var xmlHttp;
function createXMLHttpRequest()
{
 if(window.AcitveXObject)
 {
  xmlHttp = new ActiveXObject("Mirosoft.XMLHTTP");
 }
 else if(window.XMLHttpRequest)
 {
  xmlHttp = new XMLHttpRequest();
 }
}