c语言教材系统管理课设
?教材管理系統(tǒng)c語言課設(shè)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct stunode
{
?? ?char no[20];
?? ?char name[10];
?? ?int score;
?? ?char title[10];
?? ?char syzy;
?? ?char zy;
?? ?char cbs;
?? ?char cbrq ;
?? ?struct stunode *next;?? ? } STU;/*定義鏈表節(jié)點(diǎn)的結(jié)構(gòu)體類型struct stunode,取別名STU*/?
?STU head;/*定義頭結(jié)點(diǎn)head*/
?STU *findNode(char *on);
?int getIndex(char *on);
?void showMenu( );
?void createList( );
?void printList( );
?void insertAt( );
?void deleteNode( );
?void modify( );
?void freeList( );
?void showData( );
?int main ( )
?{
??? ?int select;
??? ?head.next=NULL;/*將頭結(jié)點(diǎn)next置為NULL*/?
??? ?while(1)
?? ? {
?? ? ?? ?showMenu( );
?? ? ?? ?printf("請選擇需要的操作: ");?
?? ??? ?scanf("%d",&select);
?? ??? ?fflush(stdin);/*清除鍵盤緩沖區(qū)*/
?? ??? ?switch(select) ?/*根據(jù)用戶選擇,調(diào)用相應(yīng)的函數(shù)完成操作*/
?? ??? ?{
?? ??? ??? ?case 1:createList( );break;
?? ??? ??? ?case 2:printList( );break;
?? ??? ??? ?case 3:insertAt( );break;
?? ??? ??? ?case 4:deleteNode( );break;
?? ??? ??? ?case 5:modify( );break;
?? ??? ??? ?case 6:showData( );break;
?? ??? ??? ?case 0:freeList( );exit(0);
?? ??? ??? ?default:printf("請輸入錯誤!\n");?
?? ??? ??? ?
?? ??? ? ?} ?
?? ??? ? ?? ? ?? ?system("pause");
?? ? ?? ?
?? ? }
??? ?return 0;?? ?
??? ?
?}
?/*函數(shù)功能;根據(jù)查找功能:按多種方式查找并顯示至少實(shí)現(xiàn) 2 種,比如按照出版社或者作者等)查找存放信息的結(jié)點(diǎn)。若找到,則返回該結(jié)點(diǎn),否則返回NULLL */
?STU* findNode(char *no)
?{
??? ?STU *p;
??? ?p=head.next;/*p指向第一個結(jié)點(diǎn)*/?
??? ?while(p!=NULL)/*當(dāng)p不為NULL*/
?? ? {
?? ? ?? ?
?? ? ?? ?if(strcmp(p->no,no)==0)break;/*如果相等,結(jié)束循環(huán)*/
?? ??? ? p=p->next;/*p指向下一個結(jié)點(diǎn)*/?? ??? ?
?? ? ?}?
??? ?return p;
}
/*函數(shù)功能;根據(jù)教材名稱獲取存放該教材的信息的結(jié)點(diǎn)的序號,若找到,則返回該結(jié)點(diǎn)序號,否則返回0*/
int getIndex(char *no)
{
?? ?int index=1;
?? ?STU *p;
?? ?p=head.next;/*p指向第一個結(jié)點(diǎn)*/?
?? ?while(p!=NULL)/*當(dāng)p不為NULL*/?
?? ?{
?? ??? ?if(strcmp(p->no,no)==0)break;/*如果相等結(jié)束循環(huán)*/?
?? ??? ?p=p->next;/*p指向下一個結(jié)點(diǎn)*/?
? ? ?? ?index++;/*序號加一*/ ?? ?
?? ?}
?? ?if(p==NULL)
?? ? return 0;
?? ? else
?? ? return index;?? ?
?}?
/*函數(shù)功能: 顯示菜單*/?
?void showMenu( )
?{
??? ?system("cls");/*清屏*/
?? ?printf("******教材庫信息管理系統(tǒng)*******\n");
?? ?printf("\t 1.創(chuàng)建教材管理鏈表\n");?
??? ?printf("\t 2.顯示教材全部記錄\n " );
??? ?printf("\t 3.在指定位置插入一條或多條記錄\n" );
??? ?printf("\t 4.按教材編號刪除\n");
??? ?printf("\t 5.按教材功能進(jìn)行修改\n");
??? ?printf("\t 6.輸出出版社或者作者查找教材信息\n");?
??? ?printf("\t 0.退出\n");
??? ?return; ?? ?
?}
?/*函數(shù)功能: 創(chuàng)建儲存n個教材管理列表。*/
?void createList( )
?{
??? ?int i,n;
??? ?STU *p,*tail;
??? ?if(head.next!=NULL)
?? ? {
?? ? ?? ?printf("教材管理列表已經(jīng)創(chuàng)建! \n");
?? ? ?? ?return;
?? ??? ? ?} ?? ?
??? ? tail=&head;/*初始建立鏈表tail指向頭結(jié)點(diǎn)head*/
??? ? printf("請輸入教材個數(shù): ");?
??? ? scanf("%d",&n);
??? ? for(i=1;i<=n;i++)/*輸入n個教材信息保存到鏈表中*/
?? ? ?{
?? ? ??? ?p=(STU *)malloc(sizeof(STU));/*新建一個結(jié)點(diǎn)*/
?? ??? ? ?if (p==NULL)
?? ??? ? ?{
?? ??? ? ??? ?printf("建立鏈表時內(nèi)存分配失敗!\n");
?? ??? ? ??? ?return; ?? ?
?? ??? ? ? }?
?? ? ??? ?scanf("%s%s%d",p->no,p->name,&p->score);
?? ? ??? ?/*將結(jié)點(diǎn)添加到鏈表尾部*/
?? ??? ? ?tail->next=p;
?? ??? ? ?p->next=NULL;
?? ??? ? ?tail=p;?? ?
?? ? ? }?
?? ? ? return;
?}
/*函數(shù)功能; 輸出鏈表中儲存的所有教材的信息*/
void printList() ??
?? ? ? {
?? ? ? ?? ?STU *p;
?? ? ? ?? ?if(head.next==NULL)?? ? ? ?? ?
?? ? ? ?? ?{
?? ? ? ?? ??? ?printf("未創(chuàng)建教材管理列表!\n");
?? ? ? ?? ??? ?return;
?? ??? ? ? }
?? ? ? ?? ?p=head.next;/*指針變量p指向第一個結(jié)點(diǎn)*/
?? ??? ? ? printf("編號\t\t名稱\t價格\n") ;
?? ??? ? ? while(p!=NULL)/*當(dāng)p不為NULL時,說明還有結(jié)束需輸出*/?
?? ??? ? ? {
?? ??? ? ? ?? ?printf("%-16s%-10s%d\n",p->no,p->name,p->score);
?? ??? ? ? ?? ?p=p->next;/*指針p指向下一個結(jié)點(diǎn)*/?
?? ??? ? ? }
?? ? ? ?? ?return;?
?? ? ? }
? /*函數(shù)功能; 在指定位置插入一個一條記錄*/
void insertAt( )
? {
? ?? ?int n,i;
? ?? ?STU *pnew,*p;
? ?? ?if(head.next==NULL)
?? ? ?{
?? ? ??? ?printf("未創(chuàng)建教材管理列表!\n");
?? ? ??? ?return;
?? ? ??? ?
?? ??? ??? ?} ??? ?
?? ??? ??? ?
? ?? ?printf("請輸入要插入的位置\n");
? ?? ?scanf("%d",&n);
? ?? ?if(n<1)
? ?? ?{
? ?? ??? ?printf("插入的位置不能小于1!\n");
? ?? ??? ?return;
? ?? ??? ?
?? ? ?}
? ?? ?p=&head;
? ?? ?for(i=1;i<=n-1;i++);/*循環(huán)結(jié)束后,p指向第n-1個結(jié)點(diǎn)*/
?? ? ?{
?? ? ??? ?if(p==NULL)
?? ?
?? ??? ?p=p->next;?? ?
?? ? ? }?
? ?? ?if(p==NULL)
? ?? ?{
? ?? ??? ?printf("插入位置太大!\n");
? ?? ??? ?return;
? ?? ??? ?
?? ? ?}
? ?? ?
? ?? ?pnew=(STU*)malloc(sizeof(STU));/*新建結(jié)點(diǎn)*/
?? ? ?if(pnew==NULL)
?? ? ?{
?? ? ??? ?
?? ? ??? ?printf("動態(tài)內(nèi)存分配失敗! ");
?? ? ??? ?return;
?? ? ? }?
? ?? ?printf("請輸入教材編號、名稱、價格、數(shù)量: \n");
? ?? ?scanf("%s%s%d",pnew->no,pnew->name,&pnew->score);
? ?? ?pnew->next=p->next;/*將p點(diǎn)指結(jié)點(diǎn)的next賦給新的結(jié)點(diǎn)的next*/
?? ? ?p->next=pnew;/*將新結(jié)點(diǎn)的地址賦給p所指結(jié)點(diǎn)的next*/
?? ? ?printf("插入成功!\n");
?? ? ?return;
?? ? ??
? ?}?
? ?/*函數(shù)功能;在鏈表中按教材編號進(jìn)行刪除*/
? ?void deleteNode( )
? ?{
? ??? ?int n,i;
? ??? ?char no[20],select;
? ??? ?STU *p,*pre;
? ??? ?if(head.next==NULL)
? ??? ?{
? ??? ??? ?printf("未創(chuàng)建教材管理鏈表!\n");
? ??? ??? ?return;
?? ?
?? ? ? }
?? ? ? printf("請輸入要刪除教材的編號!\n");
?? ? ? gets(no);
?? ? ? n=getIndex(no);
?? ? ? if(n==0)/*若n為0表示要刪除的編號的教材不存在*/
?? ? ? {
?? ? ? ?? ?printf("教材信息不存在X!\n");
?? ? ? ?? ?return;
?? ??? ?}?
?? ??? ?pre=&head;/*指針變量pre指向頭結(jié)點(diǎn)*/
?? ??? ?for(i=1;i<=n-1;i++)/*循環(huán)結(jié)束后,pre指向第一個n-1個結(jié)點(diǎn)*/
?? ??? ?{
?? ??? ??? ?pre=pre->next;?
?? ??? ?}
?? ??? ? p=pre->next;
?? ??? ? printf("該教材的編號為;\n");
?? ??? ? printf("%-16s%d\n",p->name,p->score);
?? ??? ? fflush(stdin);
?? ??? ? printf("是否確認(rèn)刪除(Y/X)?");/*確認(rèn)是否刪除結(jié)點(diǎn)*/
?? ??? ? select=getchar();
?? ??? ? if(select=='Y'||select=='y')
?? ??? ? {
?? ??? ? ?? ?pre->next=p->next;/*將p點(diǎn)所指向的結(jié)點(diǎn)從鏈表中刪除*/
?? ??? ??? ? free(p);
?? ??? ??? ? printf("刪除成功!\n");
?? ?
?? ??? ? ?}?
?? ??? ? else
?? ??? ? ? ? printf("刪除取消!\n");
?? ??? ? return;
?? ??? ? ? ??
? ??? ?
? ?}
? ?/*函數(shù)功能; ?按教材編號進(jìn)行修改*/
? ?void modify( )
? ?{
? ??? ?STU *p;
? ??? ?char no[20];
? ??? ?if(head.next==NULL)
? ??? ?{
? ??? ??? ?printf("未創(chuàng)建教材管理鏈表!\n");
? ??? ??? ?return;
?? ? ? }
? ??? ?printf("請輸入需要修改的教材的編號;\n");
? ??? ?gets(no);
? ??? ?p=findNode(no);/*查找no對應(yīng)的結(jié)點(diǎn)地址*/
?? ?if(p==NULL) /*如果沒有找到*/?
?? ?{
?? ??? ?printf("該教材的信息不存在!\n");
?? ??? ?return;?? ?
?? ?}
? ??? ?printf("該教材的名稱和編號:\n");
? ??? ?printf("%-16s%d\n",p->name,p->score);
? ??? ?printf("請輸入修改后的編號:\n");
? ??? ?scanf("%d",&p->score);
? ??? ?printf("修改成功!\n");
? ??? ?return;
?? ?}?
?void showData( )
?{
??? ?char no[20];
??? ?STU *p;
??? ?if(head.next==NULL)
??? ?{
??? ??? ?printf("未創(chuàng)建教材管理鏈表!\n");
??? ??? ?return;
?? ? }
??? ?printf("請輸入需要查詢的編號; \n");
??? ?gets(no);
??? ?p=findNode(no);/*查找*/
?? ?if(p==NULL)
?? ? printf("教材信息不存在! \n");
?? ? else
?? ? {
?? ? ?? ?printf("編號;%s\n",p->no);
?? ? ?? ?printf("名稱;%s\n",p->name);
?? ? ?? ?printf("成績;%d\n",p->score);
?? ? ?}?
??? ?return;
??? ?
?}
?/*函數(shù)功能; 將鏈表中所有信息存放教材信息的結(jié)點(diǎn)。*/
?void freeList( )
?{
??? ?STU *p;
??? ?p=head.next;/*從第一個結(jié)點(diǎn)開始釋放*/
?? ? while(p!=NULL)/*循環(huán)釋放列表中的每個結(jié)點(diǎn)的空間*/
?? ? {
?? ? ?head.next=p->next;
?? ? ?free(p);/*釋放p指向的結(jié)點(diǎn)空間*/?
?? ? ?p=head.next;?? ? ?? ?/*指針變量p指向下一個帶釋放的結(jié)點(diǎn)*/?
?? ? ?}?
??? ?return;
}?
??
總結(jié)
以上是生活随笔為你收集整理的c语言教材系统管理课设的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 01_JS语法
- 下一篇: ann matlab,人工神经网络ann