图书馆管理系统 图书馆管理系统是什么?

\u56fe\u4e66\u9986\u7ba1\u7406\u7cfb\u7edf

\u3000\u3000#include
\u3000\u3000#include
\u3000\u3000#include
\u3000\u3000#include

\u3000\u3000struct books_list
\u3000\u3000{

\u3000\u3000char author[20]; /*\u4f5c\u8005\u540d*/
\u3000\u3000char bookname[20]; /*\u4e66\u540d*/
\u3000\u3000char publisher[20]; /*\u51fa\u7248\u5355\u4f4d*/
\u3000\u3000char pbtime[15]; /*\u51fa\u7248\u65f6\u95f4*/
\u3000\u3000char loginnum[10]; /*\u767b\u9646\u53f7*/
\u3000\u3000float price; /*\u4ef7\u683c*/
\u3000\u3000char classfy[10]; /*\u5206\u7c7b\u53f7*/
\u3000\u3000struct books_list * next; /*\u94fe\u8868\u7684\u6307\u9488\u57df*/
\u3000\u3000};

\u3000\u3000struct books_list * Create_Books_Doc(); /*\u65b0\u5efa\u94fe\u8868*/
\u3000\u3000void InsertDoc(struct books_list * head); /*\u63d2\u5165*/
\u3000\u3000void DeleteDoc(struct books_list * head , int num);/*\u5220\u9664*/
\u3000\u3000void Print_Book_Doc(struct books_list * head);/*\u6d4f\u89c8*/
\u3000\u3000void search_book(struct books_list * head); /*\u67e5\u8be2*/
\u3000\u3000void info_change(struct books_list * head);/*\u4fee\u6539*/
\u3000\u3000void save(struct books_list * head);/*\u4fdd\u5b58\u6570\u636e\u81f3\u6587\u4ef6*/

\u3000\u3000/*\u65b0\u5efa\u94fe\u8868\u5934\u8282\u70b9*/
\u3000\u3000struct books_list * Create_Books_Doc()
\u3000\u3000{
\u3000\u3000struct books_list * head;
\u3000\u3000head=(struct books_list *)malloc(sizeof(struct books_list)); /*\u5206\u914d\u5934\u8282\u70b9\u7a7a\u95f4*/
\u3000\u3000head->next=NULL; /*\u5934\u8282\u70b9\u6307\u9488\u57df\u521d\u59cb\u5316\uff0c\u5b9a\u4e3a\u7a7a*/
\u3000\u3000return head;
\u3000\u3000}

\u3000\u3000/*\u4fdd\u5b58\u6570\u636e\u81f3\u6587\u4ef6*/
\u3000\u3000void save(struct books_list * head)
\u3000\u3000{
\u3000\u3000struct books_list *p;
\u3000\u3000FILE *fp;
\u3000\u3000p=head;
\u3000\u3000fp=fopen("data.txt","w+"); /*\u4ee5\u5199\u65b9\u5f0f\u65b0\u5efa\u5e76\u6253\u5f00 data.txt\u6587\u4ef6*/
\u3000\u3000fprintf(fp,"\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2513\n"); /*\u5411\u6587\u4ef6\u8f93\u51fa\u8868\u683c*/
\u3000\u3000fprintf(fp,"\u2503\u767b\u5f55\u53f7\u2503 \u4e66 \u540d \u2503 \u4f5c \u8005\u2503 \u51fa\u7248\u5355\u4f4d \u2503 \u51fa\u7248\u65f6\u95f4 \u2503\u5206\u7c7b\u53f7\u2503 \u4ef7\u683c \u2503\n");
\u3000\u3000fprintf(fp,"\u2523\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u252b\n");
\u3000\u3000/*\u6307\u9488\u4ece\u5934\u8282\u70b9\u5f00\u59cb\u79fb\u52a8\uff0c\u904d\u5386\u81f3\u5c3e\u7ed3\u70b9\uff0c\u4f9d\u6b21\u8f93\u51fa\u56fe\u4e66\u4fe1\u606f*/
\u3000\u3000while(p->next!= NULL)
\u3000\u3000{
\u3000\u3000p=p->next;
\u3000\u3000fprintf(fp,"\u2503%-6.6s\u2503%-10.10s\u2503%-10.10s\u2503%-10.10s\u2503%-12.12s\u2503%-6.6s\u2503%.2f \u2503\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);
\u3000\u3000}
\u3000\u3000fprintf(fp,"\u2517\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u251b\n");
\u3000\u3000fclose(fp);
\u3000\u3000printf(" \u5df2\u5c06\u56fe\u4e66\u6570\u636e\u4fdd\u5b58\u5230 data.txt \u6587\u4ef6\n");
\u3000\u3000}

\u3000\u3000/*\u63d2\u5165*/
\u3000\u3000void InsertDoc(struct books_list *head)
\u3000\u3000{
\u3000\u3000/*\u5b9a\u4e49\u7ed3\u6784\u4f53\u6307\u9488\u53d8\u91cf s\u6307\u5411\u5f00\u8f9f\u7684\u65b0\u7ed3\u70b9\u9996\u5730\u5740 p\u4e3a\u4e2d\u95f4\u53d8\u91cf*/
\u3000\u3000struct books_list *s, *p;
\u3000\u3000char flag='Y'; /*\u5b9a\u4e49flag,\u65b9\u4fbf\u7528\u6237\u9009\u62e9\u91cd\u590d\u8f93\u5165*/
\u3000\u3000p=head;
\u3000\u3000/*\u904d\u5386\u5230\u5c3e\u7ed3\u70b9\uff0cp\u6307\u5411\u5c3e\u7ed3\u70b9*/
\u3000\u3000while(p->next!= NULL)
\u3000\u3000{
\u3000\u3000p=p->next;
\u3000\u3000}
\u3000\u3000/*\u5f00\u8f9f\u65b0\u7a7a\u95f4,\u5b58\u5165\u6570\u636e,\u6dfb\u52a0\u8fdb\u94fe\u8868*/
\u3000\u3000while(flag=='Y'||flag=='y')
\u3000\u3000{
\u3000\u3000s=(struct books_list *)malloc(sizeof(struct books_list));
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u767b\u9646\u53f7:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->loginnum);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4e66\u540d:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->bookname);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4f5c\u8005\u540d:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->author);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u51fa\u7248\u793e:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->publisher);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u51fa\u7248\u65f6\u95f4:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->pbtime);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u5206\u7c7b\u53f7:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",s->classfy);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4ef7\u683c:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%f",&s->price);
\u3000\u3000printf("\n");
\u3000\u3000p->next=s; /*\u5c06\u65b0\u589e\u52a0\u7684\u8282\u70b9\u6dfb\u52a0\u8fdb\u94fe\u8868*/
\u3000\u3000p=s; /*p\u6307\u5411\u5c3e\u8282\u70b9\uff0c\u5411\u540e\u79fb*/
\u3000\u3000s->next=NULL;
\u3000\u3000printf(" \u2501\u2501\u2501\u2501 \u6dfb\u52a0\u6210\u529f\uff01\u2501\u2501\u2501\u2501");
\u3000\u3000printf("\n \u7ee7\u7eed\u6dfb\u52a0\uff1f(Y/N):");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%c",&flag);
\u3000\u3000printf("\n");
\u3000\u3000if(flag=='N'||flag=='n')
\u3000\u3000{break;}
\u3000\u3000else if(flag=='Y'||flag=='y')
\u3000\u3000{continue;}
\u3000\u3000}
\u3000\u3000save(head); /*\u4fdd\u5b58\u6570\u636e\u81f3\u6587\u4ef6*/
\u3000\u3000return;
\u3000\u3000}

\u3000\u3000/*\u67e5\u8be2\u64cd\u4f5c*/

\u3000\u3000void search_book(struct books_list *head)
\u3000\u3000{
\u3000\u3000struct books_list * p;
\u3000\u3000char temp[20];
\u3000\u3000p=head;
\u3000\u3000if(head==NULL || head->next==NULL) /*\u5224\u65ad\u6570\u636e\u5e93\u662f\u5426\u4e3a\u7a7a*/
\u3000\u3000{
\u3000\u3000printf(" \u2501\u2501\u2501\u2501 \u56fe\u4e66\u5e93\u4e3a\u7a7a\uff01\u2501\u2501\u2501\u2501\n");
\u3000\u3000}
\u3000\u3000else
\u3000\u3000{
\u3000\u3000printf("\u8bf7\u8f93\u5165\u60a8\u8981\u67e5\u627e\u7684\u4e66\u540d: ");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",temp);
\u3000\u3000/*\u6307\u9488\u4ece\u5934\u8282\u70b9\u5f00\u59cb\u79fb\u52a8\uff0c\u904d\u5386\u81f3\u5c3e\u7ed3\u70b9\uff0c\u67e5\u627e\u4e66\u76ee\u4fe1\u606f*/
\u3000\u3000while(p->next!= NULL)
\u3000\u3000{
\u3000\u3000p=p->next;
\u3000\u3000if(strcmp(p->bookname,temp)==0)
\u3000\u3000{
\u3000\u3000printf("\n\u56fe\u4e66\u5df2\u627e\u5230!\n");
\u3000\u3000printf("\n");
\u3000\u3000printf("\u767b\u5f55\u53f7: %s\t\n",p->loginnum);
\u3000\u3000printf("\u4e66\u540d: %s\t\n",p->bookname);
\u3000\u3000printf("\u4f5c\u8005\u540d: %s\t\n",p->author);
\u3000\u3000printf("\u51fa\u7248\u5355\u4f4d: %s\t\n",p->publisher);
\u3000\u3000printf("\u51fa\u7248\u65f6\u95f4: %s\t\n",p->pbtime);
\u3000\u3000printf("\u5206\u7c7b\u53f7: %s\t\n",p->classfy);
\u3000\u3000printf("\u4ef7\u683c: %.2f\t\n",p->price);
\u3000\u3000}
\u3000\u3000if(p->next==NULL)
\u3000\u3000{
\u3000\u3000printf("\n\u67e5\u8be2\u5b8c\u6bd5!\n");
\u3000\u3000}
\u3000\u3000}
\u3000\u3000}
\u3000\u3000return;
\u3000\u3000}

\u3000\u3000/*\u6d4f\u89c8\u64cd\u4f5c*/

\u3000\u3000void Print_Book_Doc(struct books_list * head)
\u3000\u3000{
\u3000\u3000struct books_list * p;
\u3000\u3000if(head==NULL || head->next==NULL) /*\u5224\u65ad\u6570\u636e\u5e93\u662f\u5426\u4e3a\u7a7a*/
\u3000\u3000{
\u3000\u3000printf("\n \u2501\u2501\u2501\u2501 \u6ca1\u6709\u56fe\u4e66\u8bb0\u5f55! \u2501\u2501\u2501\u2501\n\n");
\u3000\u3000return;
\u3000\u3000}
\u3000\u3000p=head;
\u3000\u3000printf("\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2513\n");
\u3000\u3000printf("\u2503\u767b\u5f55\u53f7\u2503 \u4e66 \u540d \u2503 \u4f5c \u8005\u2503 \u51fa\u7248\u5355\u4f4d \u2503 \u51fa\u7248\u65f6\u95f4 \u2503\u5206\u7c7b\u53f7\u2503 \u4ef7\u683c \u2503\n");
\u3000\u3000printf("\u2523\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u252b\n");
\u3000\u3000/*\u6307\u9488\u4ece\u5934\u8282\u70b9\u5f00\u59cb\u79fb\u52a8\uff0c\u904d\u5386\u81f3\u5c3e\u7ed3\u70b9\uff0c\u4f9d\u6b21\u8f93\u51fa\u56fe\u4e66\u4fe1\u606f*/
\u3000\u3000while(p->next!= NULL)
\u3000\u3000{
\u3000\u3000p=p->next;
\u3000\u3000printf("\u2503%-6.6s\u2503%-10.10s\u2503%-10.10s\u2503%-10.10s\u2503%-12.12s\u2503%-6.6s\u2503%.2f \u2503\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); /*\u5faa\u73af\u8f93\u51fa\u8868\u683c*/
\u3000\u3000}
\u3000\u3000printf("\u2517\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u251b\n");
\u3000\u3000printf("\n");
\u3000\u3000}


\u3000\u3000/*\u4fee\u6539\u64cd\u4f5c*/
\u3000\u3000void info_change(struct books_list * head)
\u3000\u3000{
\u3000\u3000struct books_list * p;
\u3000\u3000int panduan=0; /*\u6b64\u53d8\u91cf\u7528\u4e8e\u5224\u65ad\u662f\u5426\u627e\u5230\u4e66\u76ee*/
\u3000\u3000char temp[20];
\u3000\u3000p=head;
\u3000\u3000printf("\u8bf7\u8f93\u5165\u8981\u4fee\u6539\u7684\u4e66\u540d:");
\u3000\u3000scanf("%s",temp);
\u3000\u3000while(p->next!= NULL)
\u3000\u3000{
\u3000\u3000p=p->next;
\u3000\u3000if(strcmp(p->bookname,temp)==0)
\u3000\u3000{
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u767b\u9646\u5361\u53f7:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->loginnum);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4e66\u540d:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->bookname);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4f5c\u8005\u540d:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->author);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u51fa\u7248\u793e:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->publisher);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u51fa\u7248\u65f6\u95f4:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->pbtime);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u5206\u7c7b\u53f7:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%s",p->classfy);
\u3000\u3000printf("\n \u8bf7\u8f93\u5165\u56fe\u4e66\u4ef7\u683c:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%f",&p->price);
\u3000\u3000printf("\n");
\u3000\u3000panduan=1;
\u3000\u3000}
\u3000\u3000}
\u3000\u3000if(panduan==0)
\u3000\u3000{
\u3000\u3000printf("\n \u2501\u2501\u2501\u2501 \u6ca1\u6709\u56fe\u4e66\u8bb0\u5f55! \u2501\u2501\u2501\u2501\n\n");
\u3000\u3000}
\u3000\u3000return;
\u3000\u3000}


\u3000\u3000/*\u5220\u9664\u64cd\u4f5c*/
\u3000\u3000void DeleteDoc(struct books_list * head)
\u3000\u3000{
\u3000\u3000struct books_list *s,*p; /*s\u4e3a\u4e2d\u95f4\u53d8\u91cf\uff0cp\u4e3a\u904d\u5386\u65f6\u4f7f\u7528\u7684\u6307\u9488*/
\u3000\u3000char temp[20];
\u3000\u3000int panduan; /*\u6b64\u53d8\u91cf\u7528\u4e8e\u5224\u65ad\u662f\u5426\u627e\u5230\u4e86\u4e66\u76ee*/
\u3000\u3000panduan=0;
\u3000\u3000p=s=head;
\u3000\u3000printf(" [\u8bf7\u8f93\u5165\u60a8\u8981\u5220\u9664\u7684\u4e66\u540d]:");
\u3000\u3000scanf("%s",temp);
\u3000\u3000/*\u904d\u5386\u5230\u5c3e\u7ed3\u70b9*/
\u3000\u3000while(p!= NULL)
\u3000\u3000{
\u3000\u3000if(strcmp(p->bookname,temp)==0)
\u3000\u3000{
\u3000\u3000panduan++;
\u3000\u3000break;
\u3000\u3000}
\u3000\u3000p=p->next;
\u3000\u3000}
\u3000\u3000if(panduan==1)
\u3000\u3000{
\u3000\u3000for(;s->next!=p;) /*\u627e\u5230\u6240\u9700\u5220\u9664\u5361\u53f7\u7ed3\u70b9\u7684\u4e0a\u4e00\u4e2a\u7ed3\u70b9*/
\u3000\u3000{
\u3000\u3000s=s->next;
\u3000\u3000}
\u3000\u3000s->next=p->next; /*\u5c06\u540e\u4e00\u8282\u70b9\u5730\u5740\u8d4b\u503c\u7ed9\u524d\u4e00\u8282\u70b9\u7684\u6307\u9488\u57df*/
\u3000\u3000free(p);
\u3000\u3000printf("\n \u2501\u2501\u2501\u2501 \u5220\u9664\u6210\u529f! \u2501\u2501\u2501\u2501\n");
\u3000\u3000}
\u3000\u3000else /*\u672a\u627e\u5230\u76f8\u5e94\u4e66\u76ee*/
\u3000\u3000{
\u3000\u3000printf(" \u60a8\u8f93\u5165\u7684\u4e66\u76ee\u4e0d\u5b58\u5728\uff0c\u8bf7\u786e\u8ba4\u540e\u8f93\u5165!\n");
\u3000\u3000}
\u3000\u3000return;
\u3000\u3000}


\u3000\u3000int main(void)
\u3000\u3000{
\u3000\u3000struct books_list * head;
\u3000\u3000char choice;
\u3000\u3000head=NULL;
\u3000\u3000for(;;) /*\u5b9e\u73b0\u53cd\u590d\u8f93\u5165\u9009\u62e9*/
\u3000\u3000{
\u3000\u3000printf(" \u250f\u2501\u2513\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u250f\u2501\u2513\n");
\u3000\u3000printf(" \u2503 \u2503 socat \u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251b \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[1]\u56fe\u4e66\u4fe1\u606f\u5f55\u5165 \u2503\n");
\u3000\u3000printf(" \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[2]\u56fe\u4e66\u4fe1\u606f\u6d4f\u89c8 \u2503\n");
\u3000\u3000printf(" \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[3]\u56fe\u4e66\u4fe1\u606f\u67e5\u8be2 \u2503\n");
\u3000\u3000printf(" \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[4]\u56fe\u4e66\u4fe1\u606f\u4fee\u6539 \u2503\n");
\u3000\u3000printf(" \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[5]\u56fe\u4e66\u4fe1\u606f\u5220\u9664 \u2503\n");
\u3000\u3000printf(" \u2503 \u2503\n");
\u3000\u3000printf(" \u2503 \u25cf[6]\u9000\u51fa\u7cfb\u7edf \u2503\n");
\u3000\u3000printf(" \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251b\n");
\u3000\u3000printf(" \u8bf7\u9009\u62e9:");
\u3000\u3000fflush(stdin);
\u3000\u3000scanf("%c",&choice);
\u3000\u3000if(choice=='1')
\u3000\u3000{
\u3000\u3000if(head==NULL)
\u3000\u3000{
\u3000\u3000head=Create_Books_Doc();
\u3000\u3000}
\u3000\u3000InsertDoc(head);

\u3000\u3000}
\u3000\u3000else if(choice=='2')
\u3000\u3000{
\u3000\u3000Print_Book_Doc(head);
\u3000\u3000}
\u3000\u3000else if(choice=='3')
\u3000\u3000{
\u3000\u3000search_book(head);
\u3000\u3000}
\u3000\u3000else if(choice=='4')
\u3000\u3000{
\u3000\u3000info_change(head);
\u3000\u3000}
\u3000\u3000else if(choice=='5')
\u3000\u3000{
\u3000\u3000DeleteDoc(head);
\u3000\u3000}
\u3000\u3000else if(choice=='6')
\u3000\u3000{
\u3000\u3000printf("\n");
\u3000\u3000printf(" \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u611f\u8c22\u4f7f\u7528\u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n");
\u3000\u3000break;
\u3000\u3000}
\u3000\u3000else
\u3000\u3000{
\u3000\u3000printf(" \u2501\u2501\u2501\u2501 \u8f93\u5165\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\uff01\u2501\u2501\u2501\u2501");
\u3000\u3000break;
\u3000\u3000}
\u3000\u3000}
\u3000\u3000return 0;
\u3000\u3000}


图书馆管理系统
摘 要
图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。
因此本人结合开入式图书馆的要求,对MS SQL Server2000数据库管理系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆工作人员和高级管理员三方面的需要。
第一章对数据库应用系统开发和图书管理系统进行了简明的介绍,并分析了开发图书管理系统所应进行的工作。
第二章对数据库的设计和SQL语言的使用进行了系统分析,为深入理解数据库应用打下了基础。
第三章学习了具体的开发工具Delphi 6.0,对其数据库组件,SQL语言在Delphi中的应用等数据库编程关键技术进行了系统的介绍。
第四章分析了图书管理信息系统的应用需求,按照数据库设计理论一步一步地给出了系统需求说明书、局部ER图、全局ER图、系统关系模式,子模式,利用MS SQL Server2000建立了数据库
第五章进行了具体的程序设计,具体划分了三类用户的操作权限,设计了了三个操作界面。实现了数据库表的浏览,记录的添加、删除和修改,报表的生成,实现了多数据库表的连接操作,实现了多条件查询和模糊查询,并灵活实现了对不可更新查询结果集的更新操作,实现了主从表操作,实现了密码维护功能,最后,系统还可以导入数据库以对任意同结构的数据库进行操作。
设计充分利用Delphi 6、MS SQL Server2000数据库技术的强大力量,提高了编程效率和可靠性。
关键词:数据库,SQL语言,MS SQL Server,Delphi6,
数据库组件,图书管理,窗体,listview组件
24
37
§5.2 数据模块窗体的设置 ……………………………………………………… 第一章 绪 论
§1.1 数据库应用系统开发简介
在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。
数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。
数据库技术在计算机软件邻域研究中一直是非常重要的主题,产生于60年代,30多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。
1.1.1 数据库
如图1.1显示了数据库系统的主要组件。数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。
1.1.1.1 用户数据
目前,大多数主流数据库管理系统把用户数据表示为关系。现在把关系看作数据表。表的列包含域或属性,表的行包含对应业务环境中的实体的记录。并非所有的关系都同样符合要求,有些关系比其它关系更结构化一些。第二章描述了一个用以产生良好结构关系的过程,称作规范化。
为了对比结构差的关系和结构好的关系之间的差别,以本文所设计的图书管理系统中的图书和图书借阅者关系为例来说明,假若设计关系R1(借书证号,姓名,性别,身份编号,身份证,联系电话,图书编号,图书名称,图书类别,作者,出版社,出版日期,备注,价格,数量);这个关系的问题出在它有关于两个不同主题的数据,就是图书借阅者和图书。用这种方式构成的关系在进行修改时,会出现问题。因为一个图书借阅者可能借阅多本书,如果某个图书借阅者的某个字段(如联系电话)出现变更,它所借阅的图书记录(可能多个)也就必须变化,这是不好的。因此数据用两个关系表示更好。现在如果某图书借阅者改变了它的联系电话,只有关系(表)user的对应行需要改变。当然,要想产生一个,显示图书名称及其借阅者联系电话的报表,就需要将这两个表的行结合起来。结果表明,将关系分别存储,在生成报表的时候将它们结合起来,比把它们存储在一个合成的表中更好。
user(借书证号,姓名,性别,身份编号,身份证,联系电话,)
book(图书编号,图书名称,图书类别,作者,出版社,出版日期,备注,价格,数量)
1.1.1.2 元数据
数据库是自描述的,这就意味着它自身包含了它的结构的描述,这种结构的描述称作元数据。因为DBMS产品是用来存储和操纵表的,所以大多数产品把元数据以表的形式存储,有时称作系统表。这些系统表存储了数据库中表的情况,指出每一个表中有多少列,那一列是主关键字,每一列的数据类型的描述,它也存储索引、关键字、规则和数据库结构的其他部分。
在表中存储元数据不仅对DBMS是有效的,对用户也是方便的,因为他们可以使用与查询用户数据同样的查询工具来查询元数据。本文第二章所介绍的SQL语言可以同时用于元数据和用户数据。
1.1.1.3 索引
第三种类型的数据改进了数据库的性能和可访问性,这种数据经常称作开销数据,尽管有时也采用其他类型的数据结构,如链表,但它主要还是索引。索引可以用来排序和快速访问数据。下面以本人的图书管理信息系统中的book表为例来说明。
假定数据在磁盘上是按’图书编号’的递增顺序排列的,用户想打印一个按’图书名称’排序的图书数据报表。为此,所有的数据都需要从源表中提取出来并排序,除非表很小,否则这是一个很费时的过程。或者,可以在‘图书名称’字段上创建一个索引,该索引的条目按照‘图书名称’排序,这样,该索引的条目可以读出来,并用来按顺序访问book数据。
索引用于快速访问数据。例如,一个用户只想访问book表中‘图书类别’值为‘01’的那些学生。如果没有索引,则必须搜索整个源表;但有了索引之后,可以找到索引条目,并使用它来挑选所有合适的行。
索引对排序和查找是有帮助的,但要付出代价。book表中的行每次改变时,索引也必须改变,这意味着索引并非随意的,应该在真正需要时保存。
1.1.1.4 应用元数据
存储在数据库中的第四种数据是应用元数据,它用来存储用户窗体、报表、查询和其他形式的查询组件。并非所有的DBMS都支持应用组件,支持组件的DBMS也不一定把全部组件的结构作为应用元数据存储在数据库中。然而,大多数现代的DBMS产品存储这种数据作为数据库的一部分。一般来说,数据库开发人员和用户都不直接访问应用元数据,想反,他们通过DBMS中的工具来处理这些数据。
MS SQL Server2000中就支持窗体、存储过程等应用元数据。
1.1.2 数据库管理系统
数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、更新及各种控制,都是通过DBMS进行的。DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS可以分成层次型、网状型、关系型、面向对象型等。MS SQL Server2000就是一种关系型数据库管理系统。
关系模型。关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。
关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。
如图1.1所示,DBMS的特点和功能可以分为三个子系统:设计工具子系统、运行子系统和DBMS引擎。
设计子系统有一个方便数据库及其应用创建的工具集。它典型地包含产生表、窗体、查询和报表的工具。DBMS产品还提供编程语言和对编程语言的接口。
运行子系统处理用设计子系统开发的应用组件。它所包含的运行处理器用来处理窗体和数据库的数据交互,以及回答查询和打印报表等。
DBMS引擎从其他两个组件接受请求,并把它们翻译成对操作系统的命令,以便读写物理介质上的数据。DBMS引擎还涉及事务管理、锁、备份和恢复。
1.1.3 创建数据库
1.1.3.1 数据库模式
数据库模式定义了数据库的结构、表、关系、域和业务规则。数据库模式是一种设计,数据库和应用正是建立在此基础上的。
域是一列可能拥有的值的集合。必须为每一个表的每一列确定域。除了数据的物理格式外,还需要确定是否有些域对表来说是唯一的。
数据库模式的最后一个要素是业务规则,它是对需要反映在数据库和数据库应用程序中的业务活动的约束。业务规则是模式的一个重要部分,因为他们指定了无论什么数据变化到达DBMS引擎,允许的数据值必须满足的约束。不管无效的数据变化请求是来自窗体的用户、查询/修改请求还是应用程序,DBMS都应该拒绝。
遗憾的是,不同的DBMS产品用不同的方法实施业务规则。在某些情况下,DBMS产品不具备实施必要业务规则的能力,必须以代码形式把它们编入应用程序。
1.1.3.2 创建表
1.1.3.3 定义联系
1.1.4 应用组件
数据库应用包括窗体、查询、报表、菜单和应用程序。
§1.2 图书管理系统
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
§1.1 系统所做工作
1) 了解应用开发工具的现状
2) DelPHi6.0编程基础
3) MS SQL Server基础
4) 设计数据库;设计界面
5) 开发数据库。数据库实现的一些功能有
l 数据和数据说明的醒目显示;
l 多条件的查询、多条记录的检索、模糊查询;
l 数据文件某种存储格式导入数据窗体,经过数据完整性校验存入数据库;
l 数据库安全性的设计;
l 数据库的设计、数据接口、界面的设计。
§1.3 本文所作工作
绪论部分对数据库应用系统的结构、开发进行了简要介绍,分析了图书管理信息系统设计的特点和任务。
第二章介绍了数据库的设计和范式分析,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫。
第三章对系统介绍了Delphi 6.0的数据库编程技术、SQL语言在Delphi 6.0中的应用、MS SQL Server基础。
第四章分析了图书管理系统的应用需求,设计了系统的数据库结构,并根据需求对系统功能进行了划分和细化。
第五章根据第四章的设计结果利用MSSQL Server2000和Delphi 6.0进行了具体的应用程序设计。
总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向。
第二章 数据库理论基础
一个成功的信息管理系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术。
信息管理系统所涉及的数据库设计分五个步骤:数据库需求分析、概念设计、逻辑设计、物理设计与加载测试。
(1) 数据库需求分析的任务是将业务管理单证流化为数据流,划分主题之间的边界,绘制出DFD图,并完成相应的数据字典。
(2) 概念设计的任务是从DFD出发,绘制出本主题的实体-关系图,并列出各个实体与关系的纲要表。
(3) 逻辑设计的任务是从E-R图与对应的纲要表出发,确定各个实体及关系的表名属性。
(4) 物理设计的任务是确定所有属性的类型、宽度与取值范围,设计出基本表的主键,将所有的表名与字段名英文化(现在很多软件能支持中文字段,如MS SQL Server,我就是用的中文字段名),实现物理建库,完成数据库物理设计字典。
(5) 加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。
要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:
² 基本表的个数越少越好。
² 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。
² 字段的个数越少越好。
² 所有基本表的设计均应尽量符合第三范式。
数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。下面我们着重从SQL应用、数据库设计范式和查询优化等方面来分析本课题的系统关键技术和实现难点并加以解决。
§2.1 数据库系统设计及范式分析
信息系统的主要任务是通过大量的数据获得管理所需要的信息,这就必须存储和管理大量的数据。因此建立一个良好的数据组织结构和数据库,使整个系统都可以迅速、方便、准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一。
2.1.1 数据库系统设计
数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当、正确反映数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。
数据库设计的步骤是:
(1) 数据库结构定义:目前的数据库管理系统(DBMS)有的是支持联机事务处理CLTP(负责对事务数据进行采集、处理、存储)的操作型DBMS,有的可支持数据仓库、有联机分析处理CLAP(指为支持决策的制定对数据的一种加工操作)功能的大型DBMS,有的数据库是关系型的、有的可支持面向对象数据库。针对选择的DBMS,进行数据库结构定义。
(2) 数据表定义:数据表定义指定义数据库中数据表的结构,数据表的逻辑结构包括:属性名称、类型、表示形式、缺省值、校验规则、是否关键字、可否为空等。关系型数据库要尽量按关系规范化要求进行数据库设计,但为使效率高,规范化程度应根据应用环境和条件来决定。数据表设计不仅要满足数据存储的要求,还要增加一些如反映有关信息、操作责任、中间数据的字段或临时数据表。
(3) 存储设备和存储空间组织:确定数据的存放地点、存储路径、存储设备等,备份方案,对多版本如何保证一致性和数据的完整性。
(4) 数据使用权限设置:针对用户的不同使用要求,确定数据的用户使用权限,确保数据安全。
(5) 数据字典设计:用数据字典描述数据库的设计,便于维护和修改。
为了更好地组织数据和设计出实际应用数据库,应该注意如下问题:
规范化地重组数据结构:对数据进行规范化表达,这在后面将会具体讨论。
关系数据结构的建立:在进行了数据基本结构的规范化重组后,还必须建立整体数据的关系结构。这一步设计完成后数据库和数据结构设计工作基本完成,只待系统实现时将数据分析和数据字典的内容代入到所设计的数据整体关系结构中,一个规范化数据库系统结构就建立起来了。
建立关系数据结构涉及三方面内容:确定关联的关键指标项并建立关联表;确定单一的父系记录结构;建立整个数据库的关系结构。
(1)链接关系的确定
在进行了上述数据规范化重组后,已经可以确保每一个基本数据表(我们简称为表)是规范的,但是这些单独的表并不能完整地反映事物,通常需要通过指标体系整体指标数据才能完整全面地反映问题。也就是说在这些基本表的各宇段中,所存储的是同一事物不同侧面的属性。那么计算机系统如何能知道哪些表中的哪些记录应与其它表中的哪些记录相对应,它们表示的是同一个事物呢?这就需要在设计数据结构时将这种各表之间的数据记录关系确定下来。这种表与表之间的数据关系一般都是通过主或辅关键词之间的连接来实现的。因为在每个表中只有主关键词才能唯一地标识表中的这一个记录值(因为根据第三范式的要求,表中其它数据字段函数都依赖于主关键词),所以将表通过关键词连接就能够唯一地标识出某一事物不同属性在不同表中的存放位置。
(2)确定单一的父子关系结构
所谓确定单一的父系关系结构就是要在所建立的各种表中消除多对多(以下用M:N来表示)的现象,即设法使得所有表中记录之间的关系呈树状结构(只能由一个主干发出若干条分支,而不能有若干条主干交错发出若干条分支状况)。所谓的“父系”就是指表的上一级关系表。消除多对多关系可以借助于E-R图的方法来解决,也可以在系统分析时予以注意,避免这种情况的发生。
消除这种M:N情况的办法也很简单,只需在二表之间增加一个表,则原来M:N的关系就改成了M:1,1:N的关系了。
确定数据资源的安全保密属性:
一般DBMS都提供给我们自己定义数据安全保密性的功能。系统所提供的安全保密功能一般有8个等级(0-7级),4种不同方式(只读、只写、删除、修改),而且允许用户利用这8个等级的4种方式对每一个表自由地进行定义。
定义安全保密性的方法一般有如下几种:
a.原则上所有文件都定义为4级,个别优先级特别高的办公室(终端或微机的入网账号)可定义高于4级的级别,反之则定义为低于4的级别。
b.统计文件(表)和数据录入文件一般只对本工作站定义为只写方式,对其它工作站则定义为只读方式。
c.财务等保密文件一般只对中工作站(如财务科等)定义为可写、可改、可删除方式,对其它工作站则定义为只读方式,而且不是每个人都能读,只有级别相同和高级别者才能读

2.1.2 数据库设计范式分析
建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。
a. 数据组织的规范化形式
在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:
l 在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据)。
l 表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录)。
l 在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系)。
l 在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名)。
在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足一、二、三、四范式,满足第四范式的数据结构自动满足第一、二、三范式,……,依此类推。
第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有?/div>



  • 鍥句功棣嗙鐞嗙郴缁
    绛旓細鍥犳鏈汉缁撳悎寮鍏ュ紡鍥句功棣鐨勮姹,瀵筂S SQL Server2000鏁版嵁搴绠$悊绯荤粺銆丼QL璇█鍘熺悊銆丏elphi搴旂敤绋嬪簭璁捐,Delphi鏁版嵁搴撴妧鏈繘琛屼簡杈冩繁鍏ョ殑瀛︿範鍜屽簲鐢,涓昏瀹屾垚瀵瑰浘涔︾鐞嗙郴缁熺殑闇姹傚垎鏋愩佸姛鑳芥ā鍧楀垝鍒嗐佹暟鎹簱妯″紡鍒嗘瀽,骞剁敱姝よ璁′簡鏁版嵁搴撶粨鏋勫拰搴旂敤绋嬪簭銆傜郴缁熻繍琛岀粨鏋滆瘉鏄,鏈枃鎵璁捐鐨勫浘涔︾鐞嗙郴缁熷彲浠ユ弧瓒冲熼槄鑰呫佸浘涔﹂...
  • 鍥句功棣嗙鐞嗙郴缁鐨勪粙缁
    绛旓細缂栫洰銆佹绱佺粺璁″拰娴侀氱瓑涓氬姟鐨勮绠楁満绠$悊銆绯荤粺閲囩敤鏅鸿兘瀵艰埅寮忕晫闈㈣璁★紝鍦ㄤ笟鍔¤鍒欏疄鐜版柟闈㈡洿鍔犳敞閲嶆櫤鑳藉寲銆佽鑼冨寲銆佹祦绋嬪寲锛屾瀬澶х殑鏈夊姪浜庡叏闈㈡彁楂鍥句功棣鐨勭鐞嗘晥鐜囧強鏈嶅姟璐ㄩ噺銆傚悓鏃惰绯荤粺鍜屼笅闈㈢殑锛氱數瀛愰槄瑙堝绠$悊瀛愮郴缁熴侀氶亾楠岃瘉绠$悊瀛愮郴缁熴佽瘉鍗℃墦鍗板瓙绯荤粺鍜孫A鍔炲叕瀛愮郴缁熸瀯鎴愬浘涔﹂灞閮ㄤ竴鍗¢氥
  • 鍥句功绠$悊绯荤粺缂栧啓鐩殑鍜岄」鐩儗鏅?
    绛旓細鍥句功棣闇瑕佷负瀛︽牎鎴栫ぞ浼氭湁闇姹傝呮彁渚涘浘涔︾殑璇︾粏淇℃伅鍜岄鍐呭簱瀛樻儏鍐碉紝闇瑕佸缓绔嬪簽澶х殑鏁版嵁搴擄紱鍥句功绠$悊绯荤粺鑳藉涓轰竴瀹氭暟閲忕殑鍊熼槄鑰呮彁渚涙湇鍔°傛瘡涓熼槄鑰呰兘澶熸嫢鏈夊敮涓鏍囪瘑鍏跺瓨鍦ㄧ殑缂栧彿銆傚浘涔﹂鍚戞瘡涓涓熼槄鑰呭彂鏀惧浘涔﹁瘉锛屽浘涔﹁瘉涓寘鍚瘡涓涓熼槄鑰呯殑缂栧彿鍜屼釜浜轰俊鎭傜郴缁熼氳繃涓涓崟鐙殑绋嬪簭涓哄熼槄鑰呮彁渚涙湇鍔★紝涓...
  • 鍥句功绠$悊绯荤粺寮鍙戣儗鏅拰鎰忎箟
    绛旓細寮鍙戣儗鏅細涓轰簡鏂逛究鍥句功绠$悊鍛樼殑鎿嶄綔锛屽噺灏戝浘涔︾鐞嗗憳鐨勫伐浣滈噺骞朵娇鍏惰兘鏇存湁鏁堢殑绠$悊涔﹀簱涓殑鍥句功锛屽疄鐜颁簡浼犵粺鐨勫浘涔︾鐞嗗伐浣滅殑淇℃伅鍖栧缓璁俱傛剰涔夛細1銆佸噯澶囧拰鎻愪緵缁熶竴鏍煎紡鐨勪俊鎭紝浣垮悇绉嶇粺璁″伐浣滅畝鍖栵紝浣夸俊鎭垚鏈渶浣庛2銆佸強鏃跺叏闈㈠湴鎻愪緵涓嶅悓瑕佹眰鐨勩佷笉鍚岀粏搴︾殑淇℃伅锛屼互鏈熷垎鏋愯В閲婄幇璞℃渶蹇紝鍙婃椂浜х敓姝g‘鐨...
  • 鍥句功棣嗙鐞嗙郴缁
    绛旓細ILAS鏄浗鍐呮渶鏃╃殑鍥句功棣鑷姩鍖绠$悊杞欢锛屽畠鏀瑰啓浜嗗浗鍐呭浘涔﹂鑷姩鍖栫鐞嗗渚濊禆鍥藉杩涘彛杞欢鐨勫巻鍙层傝繖涓蒋浠朵富瑕侀潰鍚戝叕鍏遍锛屽湪鍏ㄥ浗涓皬瀛﹀浘涔﹂涓簲鐢ㄤ篃姣旇緝澶氥3銆佸崡浜眹鏂 姹熻嫃姹囨枃杞欢鏈夐檺鍏徃涓绘墦浜у搧鈥滄眹鏂囨枃鐚俊鎭湇鍔绯荤粺鈥濊嚜2000骞磋捣鍦ㄥ叏鍥借寖鍥存帹骞匡紝鍒2006骞村簳涓烘鐨勫叚骞村鐨勬椂闂村凡涓哄浗鍐300澶氬鐭ュ悕...
  • 鍥句功绠$悊绯荤粺鏈夊摢浜涘姛鑳
    绛旓細鍥句功棣嗙鐞嗙郴缁鐨勫姛鑳斤細1. 鍑嗗鍜屾彁渚涚粺涓鏍煎紡鐨勪俊鎭紝浣垮悇绉嶇粺璁″伐浣滅畝鍖栵紝浣夸俊鎭垚鏈渶浣庯紱2. 鍙婃椂鍏ㄩ潰鍦版彁渚涗笉鍚岃姹傜殑銆佷笉鍚岀粏搴︾殑淇℃伅锛屼互鏈熷垎鏋愯В閲婄幇璞℃渶蹇紝鍙婃椂浜х敓姝g‘鐨勬帶鍒躲3. 鍏ㄩ潰绯荤粺鐨勪繚瀛樺ぇ閲忕殑淇℃伅锛屽苟鑳藉緢蹇殑鏌ヨ鍜岀患鍚堬紝涓虹粍缁囩殑鍐崇瓥鎻愬嚭淇℃伅鏀寔銆4. 鍒╃敤鏁板鏂规硶鍜屽悇绉嶆ā鍨嬪鐞...
  • 瓒呮槦鍥句功绠$悊绯荤粺鍊煎緱鏇存崲鍚
    绛旓細鍊煎緱鏇存崲銆傝秴鏄熷浘涔绠$悊绯荤粺鏄竴娆惧姛鑳藉己澶х殑鍥句功绠$悊杞欢锛屽彲浠ュ府鍔鍥句功棣瀹炵幇鍥句功鐨勯噰缂栥佺紪鐩佸熻繕銆佹煡璇㈢瓑鍔熻兘锛屽彈鍒颁簡骞垮ぇ鍥句功棣嗗伐浣滆呯殑娆㈣繋銆傚湪鑰冭檻鏇存崲瓒呮槦鍥句功绠$悊绯荤粺鏃讹紝闇瑕佺患鍚堣冭檻澶氫釜鍥犵礌锛屽鏂扮郴缁熺殑鍔熻兘銆佹ц兘銆佸畨鍏ㄦс佹槗鐢ㄦс佹垚鏈瓑銆
  • 鍥句功绠$悊绯荤粺寮鍙戣儗鏅拰鎰忎箟
    绛旓細鑰屾湰椤圭洰鏃ㄥ湪鐮斿彂涓涓浘涔﹂鐨绠$悊绯荤粺锛屽疄鐜板浘涔﹂鐨勪俊鎭寲绠$悊銆傚湪鏂逛究璇昏呮煡璇㈠熼槄鍥句功鐨勫悓鏃讹紝鏂逛究鍥句功棣嗙鐞鍛樺鍥句功杩涜绠$悊銆1锛夊浜庣敤鎴锋潵璇淬傛搷浣滅畝渚挎槗琛岋紝鏈郴缁熸彁渚涗簡鎸夌収isbn锛屼功鍚嶏紝浣滆咃紝绱功鍙凤紝绫诲瀷锛5绉嶆柟寮忕殑鏌ヨ涔︾洰鎿嶄綔銆2锛夊浜庣鐞嗗憳鏉ヨ銆傛湰绯荤粺鎻愪緵鐧婚檰绯荤粺妯″潡锛屽瀛︾敓鑰佸笀浠ュ強...
  • ILAS鍥句功绠$悊绯荤粺鏄粈涔?
    绛旓細鍏充簬杩欎釜闂锛屽洖绛斿涓嬶細涓洪愭瀹屽杽鐜颁唬鍏叡鏂囧寲鏈嶅姟浣撶郴锛岀湡姝e仛鍒板尯鍩熷煄涔℃枃鐚俊鎭湇鍔℃棤姝昏鐨勫叏瑕嗙洊锛屽叏鍔涘缓璁惧浘涔﹂鎬诲垎棣嗗埗锛岀敱娴锋亽鏅鸿兘涓庣鍥捐仈鍚堟帹鍑虹殑鈥滄捣鎭扞LAS鈥鍥句功棣嗙鐞嗙郴缁姝e紡鍙戝竷銆傛捣鎭扞LAS鈥濋噰鐢ㄥ叏鏂扮殑寰湇鍔℃灦鏋勶紝闄や紶缁熺殑绾歌川鍥句功瀹屾暣涓氬姟浣撶郴澶栵紝鍏ㄩ潰瀹炵幇鐙垱鐨勭焊鐢典竴浣撳寲绠$悊锛屼笌鐢靛瓙璧勬簮...
  • 璇峰府鎴戝仛涓涓鍥句功棣嗙鐞嗙郴缁
    绛旓細2012-04-28 鎮ㄥソ,鎴戞槸瀛﹁绠楁満涓撲笟鐨,鏈杩戣佸笀瑕佹眰鎴戜滑鍋氫竴涓浘涔﹂绠$悊绯... 2012-04-19 璋佸彲浠ュ府蹇欏仛涓涓狢++鍥句功棣嗙櫥闄嗙郴缁 2010-04-06 鎴戞兂鍋氫竴涓浘涔﹂鍊熻繕涔︾殑绠$悊绯荤粺,搴旇鍏峰鍝簺鐭ヨ瘑 3 2011-08-06 鎴戜篃鎯宠鍥句功棣嗙鐞嗙郴缁,鍙互缁欐垜涓悧?QQ:77648491... 2007-04-08 鎴戣鍋氫竴涓熀浜巜eb涓嬬殑...
  • 扩展阅读:图书管理员和清洁工的故事动漫 ... 图书馆的女孩 ... 免费图书网站 ... 学校图书管理系统 ... 图书馆管理员第一季 ... 十大免费图书管理软件 ... java官网网址 ... 图书管理系统免费 ... 图书管理员女朋友动漫免费观看 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网