急急!!用数据结构和C语言(别使用C++) 编写图书信息管理系统代码

作者&投稿:有妮 (若有异议请与网页底部的电邮联系)
数据结构的课程设计,关于学生成绩管理系统的,要求只能使用C语言(不要C++)~~~~

EeSs:数据结构的课程设计,关于学生成绩管理系统的,要求只能使用C语言(不要C++)~~~
为获取建议,你需要留下可用的电子邮件地址*
您还可以使用Baidu Hi联系我们或QQ:六伍柒幺伍六幺伍 ('幺'读 yao 一声)
针对此需求
我们能提供一套与要求相匹配的源代码

ES:\59D09786BC6012589B694C5093B6EB84
EeSs:数据结构的课程设计,关于学生成绩管理系统的,要求只能使用C语言(不要C++)~~~
交易提醒:预付订金是诈骗

把扩展名改成CPP,然后编译连接
///////////////////////////////
下面这个程序是我大二上数据结构课时交的作业,现在正好电脑里面放着,所以就给你,应该满足你老师的要求了.编译环境是 VC++ 6.0
如果不会用的话就在问题补充里说,那个"例"是我临时给你打上去的,随便写了点,你要看不懂例子不会输命令就问我.
/*****************************************************************/

#include
#include
#include
#include
#include


// 清空当前屏幕
#define ClearScreen() system( "cls" )

// 显示字符串 szPrompt 并等待用户按下任意键
#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()

typedef struct carinformation // 车辆信息
{
char szRegistrationMark[64]; // 车牌号
char szArrivalTime[16]; // 到达时间
char szEntranceTime[16]; // 进入停车场(开始计费)时间
char szDepartureTime[16]; // 离开时间
} TCARINFORMATION, *LPTCARINFORMATION;


typedef struct carstack
{
LPTCARINFORMATION lpCarInformation; // 车辆信息
int nTop; // 栈顶元素下标
int nStackSize; // 栈容量
} TCARSTACK, *LPTCARSTACK;


// 初始化栈 lpCarStack, 将其容量设置为 nSize
void InitStack( LPTCARSTACK &lpCarStack, int nSize )
{
lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ) );
lpCarStack->lpCarInformation = ( LPTCARINFORMATION ) malloc(
nSize * sizeof ( TCARINFORMATION )
);
lpCarStack->nTop = -1;
lpCarStack->nStackSize = nSize;
}


// 车辆信息 carinfo 入栈 lpCarStack
void Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo )
{
lpCarStack->nTop++;
lpCarStack->lpCarInformation[lpCarStack->nTop] = carinfo;
}


// 车辆信息从栈 lpCarStack 中弹出并存入 carinfo
void Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo )
{
carinfo = lpCarStack->lpCarInformation[lpCarStack->nTop];
lpCarStack->nTop--;
}


// 若栈 lpCarstack 空,返回 TRUE;否则,返回 FALSE
BOOL IsStackEmpty( LPTCARSTACK lpCarStack )
{
return lpCarStack->nTop == -1;
}


// 若栈 lpStackFull 满,返回 TRUE;否则,返回 FALSE
BOOL IsStackFull( LPTCARSTACK lpCarStack )
{
return lpCarStack->nTop == ( lpCarStack->nStackSize - 1 );
}


// 销毁栈 lpCarStack,将指针 lpCarStack 置为 NULL
void DestroyStack( LPTCARSTACK &lpCarStack )
{
free( lpCarStack->lpCarInformation );
free( lpCarStack );
lpCarStack = NULL;
}


typedef struct carnode // 链队结点信息
{
TCARINFORMATION carinfo; // 车辆信息
struct carnode *lpNext; // 指向下一个元素的指针
} TCARNODE, *LPTCARNODE;


typedef struct carqueue // 链队
{
LPTCARNODE lpHead; // 头结点
LPTCARNODE lpRear; // 指向当前队尾的指针
int nEffectiveSize; // 当前队中元素个数
} TCARQUEUE, *LPTCARQUEUE;


// 初始化链队 lpCarQueue
void InitQueue( LPTCARQUEUE &lpCarQueue )
{
lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) );
lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) );
lpCarQueue->lpHead->lpNext = NULL;
lpCarQueue->lpRear = lpCarQueue->lpHead;
lpCarQueue->nEffectiveSize = 0;
}


// 车辆信息 carinfo 入队 lpCarQueue
void EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION carinfo )
{
LPTCARNODE lpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode ) );
lpCarNode->carinfo = carinfo;
lpCarNode->lpNext = NULL;
lpCarQueue->lpRear->lpNext = lpCarNode;
lpCarQueue->lpRear = lpCarQueue->lpRear->lpNext;
lpCarQueue->nEffectiveSize++;
}


// 队头元素从链队 lpCarQueue 中出队并存入 carinfo
void DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo )
{
LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;
carinfo = lpTemp->carinfo;
lpCarQueue->lpHead->lpNext = lpTemp->lpNext;
free( lpTemp );
lpCarQueue->nEffectiveSize--;
}


// 若链队 lpCarQueue 为空,返回 TRUE;否则,返回 FALSE
BOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue )
{
return lpCarQueue->nEffectiveSize == 0;
}


// 销毁链队 lpCarQueue
void DestroyQueue( LPTCARQUEUE &lpCarQueue )
{
LPTCARNODE lpNextCarNode = NULL;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead; lpCarNode != NULL; lpCarNode = lpNextCarNode )
{
lpNextCarNode = lpCarNode->lpNext;
free( lpCarNode );
}
free( lpCarQueue );
lpCarQueue = NULL;
}


// 将字符串时间格式转换为数字(分钟)格式,例如 12:36 将被转换为 756 ( 12 * 60 + 36 )
int ConvertTimeFormat( char *lpTime )
{
int nHour = 0;
int nMinute = 0;

sscanf( lpTime, "%d:%d", &nHour, &nMinute );

return nHour * 60 + nMinute;
}


// 根据在停车场内的停留时间 nContinuanceMinutes (分钟)计算费用
double CalculateExpense( int nContinuanceMinutes )
{
return nContinuanceMinutes * ( 5.0 / 60 );
}


int main( void )
{
int nParkCapability = 0; // 停车场容量

putchar( '
' );
printf( "请输入停车场容量:" );
scanf( "%d", &nParkCapability );

LPTCARSTACK lpCarStack = NULL; // 停车场,用栈模拟
InitStack( lpCarStack, nParkCapability );

LPTCARQUEUE lpCarQueue = NULL; // 便道,用链队模拟
InitQueue( lpCarQueue );

char cCommandType = NULL; // 命令类型
char szUserInput[128] = { NULL }; // 用户输入
do
{
ClearScreen();
putchar( '
' );
puts( "--------------------" );
puts( "[命令类型]" );
puts( "A - 车辆到达" );
puts( "D - 车辆离开" );
puts( "E - 停止输入" );
puts( "O - 显示当前停车场和便道使用情况" );
putchar( '
' );
puts( "例:" );
puts( "A,冀A1234,14:26" );
puts( "D,冀A1234,16:51" );
puts( "E" );
puts( "O" );
putchar( '
' );
printf( "请输入命令:" );
scanf( "%s", szUserInput );
puts( "--------------------" );

char szCarInformation[128] = { NULL };
sscanf( szUserInput, // 将命令类型与车辆信息分开存放
"%c,%s",
&cCommandType, // 用户输入的前半部分,即命令类型
szCarInformation // 用户输入的后半部分,即车辆信息
);

char *lpCommaLocation = NULL; // 车辆信息字符串中的逗号位置

for ( lpCommaLocation = szCarInformation; *lpCommaLocation != '\0'; lpCommaLocation++ )
{
if ( *lpCommaLocation == ',' )
{
break;
}
}
*lpCommaLocation = '\0';

TCARINFORMATION carinfo = { NULL }; // 存储本次用户输入的车辆信息

strcpy( carinfo.szRegistrationMark, szCarInformation );

if ( cCommandType == 'A' )
{
strcpy( carinfo.szArrivalTime, lpCommaLocation + 1 );

if ( FALSE == IsStackFull( lpCarStack ) )
{
strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime );
Push( lpCarStack, carinfo );
printf( "已进入停车场第 %d 个车位
",
lpCarStack->nTop + 1
);
printf( "车牌号:%s
", carinfo.szRegistrationMark );
printf( "进入时间:%s
", carinfo.szEntranceTime );
puts( "是否收费:是" );
}
else
{
EnQueue( lpCarQueue, carinfo );
printf( "停车场已满,已停放在便道的第 %d 个车位
",
lpCarQueue->nEffectiveSize
);
printf( "车牌号:%s
", carinfo.szRegistrationMark );
printf( "停放时间:%s
", carinfo.szArrivalTime );
puts( "是否收费:否" );
}
}
else if ( cCommandType == 'D' )
{
strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 );

LPTCARSTACK lpTempCarStack = NULL;
InitStack( lpTempCarStack, nParkCapability );

TCARINFORMATION carinfoOut = { NULL };

BOOL bIsCarFound = FALSE;
while ( FALSE == IsStackEmpty( lpCarStack ) )
{
Pop( lpCarStack, carinfoOut );
if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinfo.szRegistrationMark ) )
{
Push( lpTempCarStack, carinfoOut );
}
else
{
bIsCarFound = TRUE;
break;
}
}

while ( FALSE == IsStackEmpty( lpTempCarStack ) )
{
TCARINFORMATION tempcarinfo = { NULL };
Pop( lpTempCarStack, tempcarinfo );
Push( lpCarStack, tempcarinfo );
}

if ( FALSE == bIsCarFound )
{
printf( "车牌号为 %s 的车未进入停车场.
", carinfo.szRegistrationMark );
Pause( "--------------------
按任意键输入下一条信息...
" );
continue;
}

strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime );
int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime );
int nDepartureTime = ConvertTimeFormat( carinfoOut.szDepartureTime );
int nContinuanceMinutes = nDepartureTime - nEntranceTime;
printf( "计费时段:%s - %s (共 %d 分钟)
",
carinfoOut.szEntranceTime,
carinfoOut.szDepartureTime,
nContinuanceMinutes
);
double rExpense = CalculateExpense( nContinuanceMinutes );
printf( "应交纳的费用:%.1lf 元
", rExpense );

if ( FALSE == IsQueueEmpty( lpCarQueue ) )
{
TCARINFORMATION tempcarinfo = { NULL };
DeQueue( lpCarQueue, tempcarinfo );
strcpy( tempcarinfo.szEntranceTime, carinfoOut.szDepartureTime );
Push( lpCarStack, tempcarinfo );
puts( "--------------------" );
printf( "停放在便道的第 1 个车位,车牌号为 %s 的车已进入停车场
",
tempcarinfo.szRegistrationMark
);
}
}
else if ( cCommandType == 'E' )
{
puts( "********************" );
puts( "陈赛 - Build20090507
" );
puts( "********************" );
break;
}
else if ( cCommandType == 'O' )
{
ClearScreen();
putchar( '
' );
puts( "[停车场使用情况]
" );
puts( "[车位][车牌号][到达时间][进入(开始计费)时间]
");
for ( int i = 0; i nTop; i++ )
{
printf( "%d%s%s%s
",
i + 1,
lpCarStack->lpCarInformation[i].szRegistrationMark,
lpCarStack->lpCarInformation[i].szArrivalTime,
lpCarStack->lpCarInformation[i].szEntranceTime
);
}
putchar( '
' );
putchar( '
' );
putchar( '
' );
puts( "[便道使用情况]
" );
puts( "[车位][车牌号][到达时间][进入(开始计费)时间]
");
int nNum = 0;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;
lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )
{
nNum++;
printf( "%d%s%s%s
",
nNum,
lpCarNode->carinfo.szRegistrationMark,
lpCarNode->carinfo.szArrivalTime,
lpCarNode->carinfo.szEntranceTime
);
}
putchar( '
' );
}
else
{
puts( "输入信息有误.第一个字符只能为 'A' 或 'D' 或 'E' 或 'O' (区分大小写)." );
}
Pause( "--------------------
按任意键输入下一条信息.
" );
} while ( TRUE );

DestroyStack( lpCarStack );
DestroyQueue( lpCarQueue );

Pause( "
按任意键退出程序...
" );

return 0;
}

/*输入图书信息*/

struct library *input_message(void)/*指向输入图书信息*/

{struct library *p1,*p2,*head;/*包含三个指针*/

char ch;/*字符*/ head=NULL;/*头指针为空*/

head=p2=p1=(struct library*)malloc(N);/*指针自由分配的空间大小为N*/

do{

p1=(struct library *)malloc(N);/*当p1所占的大小为N时*/

clrscr();/*清屏*/

printf("\n\n\t**Input book message**\n");/*输出图书信息*/

printf("\t serial_number:");/*输出序列号*/

scanf("%ld",&p1->b_num);/*输入书的名字*/

printf("\t book_name:");/*输出书的名字*/

scanf("%s",p1->b_name);/*输入书的名字*/

printf("\t press_name:");/*输出出版社*/

scanf("%s",p1->p_name);/*输入出版社*/

printf("\tpress_time(yy-mm):");/*输出出版日期*/

scanf("%d%d",&p1->p_time.year,&p1->p_time.month);/*输入出版日期*/ printf("\t total_number:");/*输出图书总数*/

scanf("%ld",&p1->t_num);/*输入图书总数*/

printf("\t left_number:");/*输出剩余图书数*/

scanf("%ld",&p1->l_num);/*输入剩余图书数*/

printf("\t book_kind:");/*输出图书种类*/

scanf("%s",p1->b_kind);/*输入图书种类*/

p2->next=p1;/*将p2指针指向P2*/p2=p1;

printf("\t\tContinue? (Y/N):");/*输出信息“是否继续(是/不是)?”*/

ch=getch();/*输入字符*/

}while(ch=='Y'||ch=='y');/*当输入‘Y’或者‘y’的时候*/

p2->next=NULL;/*最后一个结点的后继指针为空*/

p1=head;/*p1等于头指针*/

head=p1->next;/*头指针等于p1所指向的下一个*/

free(p1);/*释放出p1的空间*/

printf("\n\tInput over!");/*打印输入结束*/

ch=getchar();/*输入字符*/

return head;/*返回首部*/}/*储存图书信息*/

save_message(struct library *p)

{FILE *fp;/*定义指向文件的指针*/

if((fp=fopen("library.txt","wt"))==NULL)/*为输出打开一个二进制文件夹,如果没有则建立*/

{ printf("\nSorry! Open the document to be wrong!");/*输出对不起,打开文件失败*/ return;/*返回*/}

while(p!=NULL)/*如P不为空*/

{ fprintf(fp,K);/*输出图书的序列号,书名,出版社,出版日期,图书总量,剩余图数量,书的种类等信息*/

p=p->next;/*p等于p所指向的next*/ }

fclose(fp);/*关闭文件*/

return;/*返回*/}

//xieai999
#include <stdio.h>
#include <string.h>

typedef struct study
{
int number;
char name[30];
char state[2];
}LT;

typedef struct book
{
LT *s[1000];
int top;
}LY;

void CreatLT(LT **s,int a,char g[],char c[])
{
(*s)=(LT *)malloc(sizeof(LT));
(*s)->number=a;
int i=0;
while(i<30)
{
if(g[i]!='\0')
(*s)->name[i]=g[i];
else
(*s)->name[i]='\0';
i++;
}
(*s)->state[0]=c[0];
(*s)->state[1]='\0';

}

void CreatLY(LY **r)
{
(*r)=(LY *)malloc(sizeof(LY));
(*r)->top=-1;
}

void Seek(LY *a)
{
printf("1,号码\n2,书名\n3,状态\n");
int x,i,y,k,symble=0;
char d[10],e[1];
scanf("%d",&x);
switch(x)
{
case 1:
printf("书号:");
scanf("%d",&y);
i=0;
for(i;i<=a->top;i++)
{
if(y==a->s[i]->number)
{
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
break;
}
if(i==a->top)
printf("没找到\n");
}
break;

case 2:
i=0;
printf("书名:");
scanf("%s",&d);
for(i;i<=a->top;i++)
{
if(strlen(d)==strlen(a->s[i]->name))
for(k=0;k<strlen(d);k++)
{
if(d[k]!=a->s[i]->name[k])
break;
if(k==strlen(d)-1)
{
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
symble=1;
}
}
if(symble==1)
break;
if(i==a->top)
printf("没找到\n");
}
break;

case 3:
printf("状态(Y/N)\n");
scanf("%s",&e);
i=0;
for(i;i<=a->top;i++)
{
if(a->s[i]->state[0]==e[0])
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
}
break;
default:
printf("没有该选项\n");
break;
}
}

main()
{
printf("欢迎进入图书管理系统\n");
int k=0,i=0;
LT *s[1000],*p;LY *A;
CreatLY(&A); char a[30]="",b[2]="";
for(k; ;k++)
{
printf("1,输入\n2,输出\n3,查询\n4,删除\n5,修改\n0,退出\n");
int x,number,j=0,h;
scanf("%d",&x);
switch(x)
{
case 1:
printf("编号(必须是整数):");
scanf("%d",&number);
printf("书名:");
scanf("%s",&a);
printf("状态(注意:只能输入N(借出)/Y(未借出)):");
scanf("%s",&b);
CreatLT(&s[i],number,a,b);
A->top++;
A->s[A->top]=s[i];
i++;
break;

case 2:
j=0;
while(j<=A->top)
{
printf("%d %s %s\n",A->s[j]->number,A->s[j]->name,A->s[j]->state);
j++;
}
break;

case 3:
Seek(A);
break;

case 4:
printf("要删除的书号:");
scanf("%d",&number);
j=0;
for(j;j<=A->top;j++)
{
if(A->s[j]->number==number)
{
p=A->s[A->top];
A->s[A->top]=A->s[j];
A->s[j]=p;
A->top--;
break;
}
if(j==A->top)
printf("没有这本书\n");
}
break;

case 5:
printf("要修改的书号:");
scanf("%d",&number);
j=0;
for(j;j<=A->top;j++)
{
if(A->s[j]->number==number)
{
printf("1,修改书号\n2,修改书名\n3,修改状态\n");
scanf("%d",&number);
if(number==1)
{
printf("新书号:");
scanf("%d",&number);
A->s[j]->number=number;
break;
}
else
if(number==2)
{
printf("新书名:");
scanf("%s",&a);
h=0;
while(A->s[j]->name[h]!='\0')
{
if(a[h]!='\0')
A->s[i]->name[h]=a[h];
else
A->s[i]->name[h]='\0';
h++;
}
break;
}
else
if(number==3)
{
printf("新状态:");
scanf("%s",&b);
A->s[i]->state[0]=b[0];
break;
}
else
{
printf("输入错误\n");
j=j-1;
}
}
if(j==A->top)
printf("没有这本书\n");
}
break;

case 0:
h=10000;
break;

default:
printf("没有该选项\n");
break;
}
if(h==10000)
break;
}
}

忙啦个中午,,,还没恰饭呢,,,多给点分,,,以后有什么类似的可以找我!!!

本人邮箱长期在线,有什么不懂得可直接询问。邮箱:wyw2010@tom.com
这是我以前做的课程设计,没有修改功能。修改很好做,我这还有一份学生管理信息的源代码,能实现上述全部功能。由于我现在正在帮客户做个系统,没时间来完善这个程序,希望你自己能够完善一下。
/*设计实现一个简单的图书管理系统,对图书馆的业务进行管理*/

////////////////////////////////////////////////
//内容:设计实现一个简单的图书管理系统,对图书馆的业务进行管理
//要求:用C语言及顺序结构来实现,系统具有如下功能
//1. 图书入库:图书数据包括图书书号,书名,作者,数量,单价等,一本书作为一个结点,
//以书号为关键字,按输入的顺序建立顺序表
//2.排序:以书号按升序进行排序(可以任选一种排序方法)
//3.查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法)
//4.删除:从表中删除指定的图书
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define LIST_INIT_SIZE 50
#define LISTINCREMENT 10
typedef struct Book
{
int BookNum;/*图书书号*/
char BookName[50];/*图书书名*/
char BookWrite[50];/*图书作者*/
float BookPrice; /*图书价格*/
int numbers ; /*图书数量*/
}Book;
typedef struct Library_Data
{
Book *book;
int length;
int listsize;
int Num;
}Library_Data,*Lib_Data;
//显示指定的一条记录
void print(Book p)
{
printf("\n********************************************************************\n");
printf("图书书号 图书书名 图书作者 图书数量 图书单价(元)\n");
printf("--------------------------------------------------------------------\n");
printf("%-14d%-14s%-14s%-14d%-14f\n",p.BookNum,p.BookName,p.BookWrite,p.numbers,p.BookPrice);
printf("********************************************************************\n");
}
//查找函数
int find(Library_Data p,int Num,char s[20])
{
int i,low,mid,high;
if(Num==-1)
for(i=0;i<p.length;i++) /*顺序查找*/
{
if(strcmp(s,p.book[i].BookName)==0)
return i;
}
else if(strcmp(s,"")==0)
{
low=0;high=p.length;
while(low<=high) /*折半查找*/
{
mid=(low+high)/2;
if(Num==p.book[mid].BookNum) return mid;
else if(Num>p.book[mid].BookNum) low=mid+1;
else high=mid-1;
}
}
return -1;
}
//升序排序
Library_Data Sort_Book(Library_Data &p)
{
Book p0;
int i,j;
if(p.Num==0) return p;
for(i=0;i<p.length;i++)
{
for(j=i+1;j<p.length;j++)
{
if(p.book[i].BookNum>p.book[j].BookNum)
{
p0=p.book[i];
p.book[i]=p.book[j];
p.book[j]=p0;
}
}
}
return p;
}
//图书初始化
void Create_Data(Library_Data &p1)
{
int i=0;
Book *newbase;
system("cls");
printf("现在对图书进行初始化\n");
puts("***********************************");
p1.Num=0;p1.length=0;
p1.listsize=LIST_INIT_SIZE;
p1.book=(Book *)malloc(LIST_INIT_SIZE*sizeof(Book));
do
{

if(p1.length>p1.listsize)
{

newbase=(Book *)realloc(p1.book,(p1.listsize+LISTINCREMENT)*sizeof(Book));
if(!newbase) exit(0);
p1.book=newbase;
p1.listsize+=LISTINCREMENT;
}
printf("请输入图书书号:");
scanf("%d",&p1.book[i].BookNum);
printf("请输入图书书名:");
scanf("%s",&p1.book[i].BookName);
printf("输入图书作者: ");
scanf("%s",&p1.book[i].BookWrite);
printf("请输入图书数量:");
scanf("%d",&p1.book[i].numbers);
printf("请输入图书价格:");
scanf("%f",&p1.book[i].BookPrice);
p1.Num+=p1.book[i].numbers;i++;p1.length++;

printf("***********************************\n");
printf(" 按 n 退出,按别的继续。\n"); /*提示如何继续、退出*/
printf("***********************************\n");
}while(getch()!='n');
Sort_Book(p1);
}
//查找图书
int Find_Book(Library_Data p,int n)
{
char name[20]="";
int k,Num=-1;
if(p.Num==0)
{
system("cls");
printf("现无图书记录! ");
return 0;
}
else if(n==1)
{
system("cls"); /*清屏*/
printf("现在是对图书信息进行查找");
printf("\n*********************************************\n");
printf("请输入你要查找的图书书名:");
scanf("%s",name);
k=find(p,Num,name); /*调用find()查找函数*/
if(k!=-1) /*条件满足执行下面函数*/
print(p.book[k]);
else
printf("\n 没有找到你要找的图书信息.按任意键继续。");
}
else if(n==2)
{
system("cls"); /*清屏*/
printf("现在是对图书信息进行查找");
printf("\n*********************************************\n");
printf("请输入你要查找的图书书号:");
scanf("%d",&Num);
k=find(p,Num,name); /*调用find()查找函数*/
if(k!=-1) /*条件满足执行下面函数*/
print(p.book[k]);
else
printf("\n 没有找到你要找的图书信息.按任意键继续。");
}
else
printf("你的选择有误!");
return 1;
}
//插入图书
void add(Library_Data &p0)
{
int i,k,low,mid,high;
Book p1,*p2,*p3,*newbase;
system("cls");
if(p0.Num==0)
printf("图书信息表还没有初始化,需要对图书信息表进行初始化后才能进行插入。\n");
else
{
if(p0.length>=p0.listsize-1)
{
newbase=(Book *)realloc(p0.book,(p0.listsize+LISTINCREMENT)*sizeof(Book));
if(!newbase) exit(0);
p0.book=newbase;
p0.listsize+=LISTINCREMENT;
}
printf("请输入待插入图书信息:\n");
printf("*********************************************\n");
printf("请输入图书书号:");
scanf("%d",&p1.BookNum);
printf("*********************************************\n");
printf("请输入图书书名:");
scanf("%s",&p1.BookName);
printf("*********************************************\n");
printf("请输入图书作者:");
scanf("%s",&p1.BookWrite);
printf("*********************************************\n");
printf("请输入图书数量:");
scanf("%d",&p1.numbers);
printf("*********************************************\n");
printf("请输入图书价格:");
scanf("%f",&p1.BookPrice);
printf("*********************************************\n");
low=0;high=p0.length;
if(p1.BookNum<p0.book[0].BookNum)
{
for(p2=&p0.book[p0.length];p2>=&p0.book[0];p2--)
*(p2+1)=*p2;
p0.book[0]=p1;
p0.Num+=p1.numbers;p0.length++;
}
else if(p1.BookNum>p0.book[p0.length-1].BookNum)
{
p0.book[p0.length]=p1;
p0.Num+=p1.numbers;p0.length++;
}
else
{
for(i=0;i<p0.length;i++)
if(p1.BookNum>=p0.book[i].BookNum && p1.BookNum<p0.book[i+1].BookNum) break;
for(p2=&p0.book[p0.length];p2>&p0.book[i];p2--)
*(p2+1)=*p2;
p0.book[i+1]=p1;
p0.Num+=p1.numbers;p0.length++;
}

}
}
//删除图书
void Delete_Book(Library_Data &LD,int n)
{
system("cls");
char name[20]="";
char a;
int i=0,k=0,Num=-1;
Book *p1,*p2;
if(LD.Num==0)
printf("现无图书记录! ");
else
{
printf("进行图书信息删除");
printf("\n*********************************************\n");
if(n==1)
{
printf("请输入待删除图书书名:"); /*提示输入要删除的图书书名*/
scanf("%s",name);
printf("是否删除所有同名的图书?“y”是,其他键只删除第一个:");
if(getch()=='y') /*删除所有同名图书信息*/
{
for(i=0;i<LD.length;i++)
{
if(strcmp(name,LD.book[i].BookName)==0)
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
LD.length--;k=1;i=-1;
}
}
if(k==0) printf("\n没有你要删除的记录\n");
else printf("\n所有图书名为%s的信息已被删除!\n",name); /*显示己被删除的信息*/
}
else
{

i=find(LD,Num,name);
if(i==-1) printf("\n没有你要删除的记录\n");
else /*删除第一本相同的图书信息*/
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
printf("\n图书号为%s的信息已被删除!\n",name); /*显示己被删除的信息*/
LD.length--;

}
}
}
else if(n==2)
{
printf("请输入待删除图书书号:"); /*提示输入要删除的图书书号*/
scanf("%d",&Num);
i=find(LD,Num,name);
if(i==-1) printf("没有你要删除的记录\n");
else
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
printf("图书号为%d的信息已被删除!\n",Num); /*显示己被删除的信息*/
LD.length--;
}
}
else
printf("你的选择有误!");
}
}
//显示所有图书信息
void ShowBookTable(Library_Data p,int n)
{
int i;
system("cls");
if(n==0)
printf("现无图书记录! ");
else
{
printf("现在有%d本图书的信息。",n);
printf("\n**********************************************************************\n");
printf("图书书号 图书书名 图书作者 图书数量 图书单价(元)\n");
for(i=0;i<p.length;i++)
{
printf("----------------------------------------------------------------------\n");
printf("%-14d%-14s%-14s%-14d%-14f\n",p.book[i].BookNum,p.book[i].BookName,p.book[i].BookWrite,p.book[i].numbers,p.book[i].BookPrice);
}
printf("**********************************************************************\n");
}
}
//菜单函数
int menu_select() /*定义菜单函数*/
{
int c;
printf("按任意键进入选择菜单……\n"); /*提示压任意键继续*/
getch(); /*读入任意字符*/
system("cls"); /*清屏*/
printf("********************菜单选项如下****************\n\n"); /*以下为主菜单*/
printf(" 1. 初始化图书信息表\n");
printf(" 2. 显示全部图书记录\n");
printf(" 3. 查找图书记录\n");
printf(" 4. 删除图书记录\n");
printf(" 5. 插入新记录\n");
printf(" 6. 退出系统\n");
printf("***********************************************\n");
do{
printf("\n 输入您的选择(1~6):"); /*提示输入选项*/
scanf("%d",&c); /*输入选择项*/
if(!(c>=1&&c<=6))
{printf(" 你的输入有误,请重新输入……");}
}while(c<1||c>6); /*选择项不在0~6之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}

void main()
{
Library_Data LD;
LD.Num=0;
int n,m;
for(;;) /*无限循环*/
{
switch(menu_select())
{
case 1:Create_Data(LD);break; /*初始图书生信息*/
case 2:ShowBookTable(LD,LD.Num);break; /*显示全部图书信息*/
case 3:
printf("请你选择查找方式(“1”为按书名查找,“2”为按书号查找):");
scanf("%d",&n);
Find_Book(LD,n);break; /*查找图书信息*/
case 4:
printf("请你选择删除方式(“1”为按书名删除,“2”为按书号删除):");
scanf("%d",&m);
Delete_Book(LD,m);break; /*删除图书信息*/
case 5:add(LD);break; /*插入图书信息*/
case 6:exit(0); /*结束程序*/
}
}
}


急急!!用数据结构和C语言(别使用C++) 编写图书信息管理系统代码_百度...
\/*输入图书信息*\/ struct library *input_message(void)\/*指向输入图书信息*\/ {struct library *p1,*p2,*head;\/*包含三个指针*\/ char ch;\/*字符*\/ head=NULL;\/*头指针为空*\/ head=p2=p1=(struct library*)malloc(N);\/*指针自由分配的空间大小为N*\/ do{ p1=(struct library *)malloc(...

急急!!用数据结构和C语言(别使用C++) 编写图书信息管理系统代码_百度...
\/\/xieai999 include <stdio.h> include <string.h> typedef struct study { int number;char name[30];char state[2];}LT;typedef struct book { LT *s[1000];int top;}LY;void CreatLT(LT **s,int a,char g[],char c[]){ (*s)=(LT *)malloc(sizeof(LT));(*s)->number=a...

数据结构与算法是什么?推荐一本数据结构的书,谢了
本书是《Data Structures and Algorithm Analysis in C》一书第2版的简体中译本。原书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材。在本书中,作者更加精炼并...

数据结构与算法作业:用C语言编程随机生成一个迷宫,然后找出从入口到出...
几点说明:1.本程序是动态的,运行后自动寻找迷宫出路 2.本程序对C语言刚学完的有很大的意义.3.四周是墙,坐标(1,1)是入口,右下脚是出口 声明:本程序用VC调试是无法通过的需要修改 本程序调试工具是TC...include "graphics.h"include "dos.h"include "stdlib.h"include "process.h"define MAX...

数据结构与算法设计编程题(用C++描述),急,求大神解答~~~
初始: 2 5 3 4 1第1次: 2 5 3 4 1第2次: 2 3 5 4 1 3比最终位置前移了一个位置第3次: 2 3 4 5 1 4比最终位置前移了一个位置第4次: 2 3 4 1 5通过第一趟的排序过程发现,3、4原来...

求用简单语言讲一下数据结构中的关键路径和强连通分量。急!!!
关键路径 在学习关键路径前,先了解一个AOV网和AOE网的概念:用顶点表示活动,用弧表示活动间的优先关系的有向图:称为顶点表示活动的网(Activity On Vertex Network),简称为AOV网。与AOV网对应的是AOE(Activity On Edge)网即边表示活动的网。AOE网是一个带权的有向无环图。网中只有一个入度为...

急!!!数据结构中什么是堆?清举例说明。
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(...

数据结构和离散数学,求指导
图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许 多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大 ,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的...

急!!!数据结构课程设计
急!!!数据结构课程设计 对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、... 对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网)...

数据结构大神,求解,急急急
为什么要学习数据结构与算法?给你5大理由 1、数据结构算法,名企面试必考!2、更好地去读懂框架源码!3、更好地理解和使用框架!4、更快速地学习上手各种新技术(比如人工智能、区块链等)!5、学习和积累都要趁早。想要走得更远,站得更高,就必须掌握数据结构算法!

宣化县19518033359: 急急!!用数据结构和C语言(别使用C++) 编写图书信息管理系统代码 -
文申盐酸: //xieai999#include #include typedef struct study{ int number; char name[30]; char state[2...

宣化县19518033359: 学编程是先学数据结构还是学C语言 -
文申盐酸: 很显然你首先需要会一门编程语言.数据结构可以在不同的语言下实现,你可以看常用的数据结构教材,有的基于C有的基于cpp有的基于JAVA,先学会一门语言(不一定非要是C)再看数据结构,有助理解各种算法、结构是怎样实现的. 其实编程这东西刚入门的时候我就当作在学一门新的语言,和学英语可以跟外国人打交道一样道理,你学高级语言是为了和计算机(其实只是编译器)打交道,把要说的话“翻译”给她,告诉她我要干什么,要算什么.这时候学的东西,还没有数据结构的逻辑性那么高,有些东西得死记硬背(括号的配对啊、什么是常量变量关键字、各个语句的使用规则、数组的定义和使用……),先别想那么复杂,知道那么回事就行.过后还有好玩的值得去钻研——比如,指针……

宣化县19518033359: 跨考计算机,初试科目里有数据结构.只会用c++描述,不用c语言可不可以? -
文申盐酸: 初试的计算机统考,纯编程的内容只有数据结构有一道编程题,允许用C、C++和JAVA中的任何一种语言编写,题目一般不难,09年的编程题是:求一个链表的倒数第K个结点的值;10年的编程题是:将一个顺序表循环左移P位;刚刚考完的11...

宣化县19518033359: 用C语言和数据结构编写一个简单的程序(求源代码) -
文申盐酸: /*使用递归,理论上说可以对任意多位数组合,但位数太多了,可能发生堆栈溢出. 以下程序在VC++6.0中编译通过. */ #include <stdio.h> #include <string.h>#define MAX_NUMBER 6 //修改这个参数来允许最大的位数,现设为6位void GetZhe ...

宣化县19518033359: C语言编程怎样运用数据结构? -
文申盐酸: 有了数据结构,就可以对一些用普通的数组无法处理的问题进行处理,比如结构体等等,至于怎样运用,到了你需要用的时候再说吧,不过呢,建议看看有关方面的书籍,会比较好,比如说:数据结构----使用C语言,里面就有详细的介绍.

宣化县19518033359: 数据结构(使用C语言)问题 -
文申盐酸: 首先得知道中缀转后缀的方法,那就是从左到右开始操作数直接输出,然后运算符进栈..进栈时注意运算符的优先级,置于优先级自行看课本或者百度了解.A*(B-D)+E/F 栈:*(-) 输出:ABD 此时,出现有括号,要将括号的运算符输出;栈:* 输出:ABD- 因为+优先级小于*,因此*要输出,然后+进栈;栈:+ 输出:ABD-*E 因为/优先级大于+所以/进栈;栈:+/ 输出:ABD-*EF 左后输出栈中元素,注意,栈的出栈是FILO;栈:输出:ABD-*EF/+; 至于准确性,你可以用后缀转中缀的方式检验,就是在后缀表达式中从左到右开始,遇到运算符就提取他前面的两个操作数进行运算.

宣化县19518033359: 我们是要用C还是C++学习数据结构呢??? -
文申盐酸: 用什么都行 关键是思想问题 理解数据结构本质 至于用什么语言去实现并没有什么 推荐用C 因为个人感觉严蔚敏的教材比较好 其实 数据结构是基础 学的时候刚开始可能觉的没什么用处 但是以后 深入学习计算机后就会发现 它是多么多么的重要 关键是持之以恒啊 !!兄弟 加油啊!!!

宣化县19518033359: 请问C语言描述数据结构与C++描述数据结构,两样哪个好,跪求读书专家指点一下. -
文申盐酸: 数据结构的描述,两者之间都是一样的.C++提供更丰富的库函数,使得编程实现更为简洁、便利.1、C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承...

宣化县19518033359: 数据结构C语言版和C++版有什么区别吗? -
文申盐酸: 数据结构是抽象的,和具体语言无关.无论是C语还是C++,或者是java,他们都能实现同一种的数据结构.最多的区别就是有些的程序语言在实现某种数据结构时更为便利.例如lisp语言,天生就是链表这种数据结构.非要找C和C++的有什么...

宣化县19518033359: 怎样运用数据结构和c语言实现一个城市得公交路线图,极其任意两个站点之间的最短路径和换乘方法. -
文申盐酸: 之间搜索最短路算法的C实现,常用的就是Dijkstra(迪杰斯特拉)算法,或者是银行家算法,总之,看懂源代码,基本就可以模仿!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网