#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct{
int n;
char *name;
float price;
}STD;
typedef struct Lnode{
STD data;
struct Lnode *next;
}LNode,*LinkList;
int initLinkList(LinkList *L)//初始化
{
*L = (LNode*)malloc(sizeof(LNode));
if(*L==NULL){
return 0;
}
(*L)->next = NULL;
}
int createLinkList(LinkList *L){
int n=0;
STD x;
LinkList p,r=*L;
char yn;
do{
printf("请输入书籍编号,名字,价格\n");
scanf("%d%s%f",&x.n,&x.name,&x.price);
getchar();
p = (LinkList)malloc(sizeof(LNode));
p->data = x;
p->next = NULL;
r->next = p;
r=p;
printf("是否继续输入,是按y,不是任意");
yn = getchar();
}while(yn=='y'||yn=='Y');
}
int insert(LinkList L,int i,STD x)//插入
{
LinkList p=L,s;
int pos =0;
while(p!=NULL && pos<i-1) {
p = p->next;
pos++;
}
if(p==NULL || pos>i-1) {
printf("插入位置有误\n");
}
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next= p->next;
p->next= s;
return 1;
printf("插入成功\n") ;
}
int deleteLinkList(LinkList L,int i,STD d)//删除
{
LinkList p=L,q;
int pos = 0;
while(p!=NULL&&pos<i-1){
p = p->next;
pos = pos+1;
}
while(p==NULL||pos<i-1){
printf("删除位置不合理");
return 0;
}
q = p->next;
p->next= q->next;
q->next->data= q->data;
free(q);
printf("删除成功");
}
int dispLinkList(LinkList L){
LinkList p = L->next;
if(p==NULL){
printf("没有数据");
}
while(p!=NULL){
printf("%d %s %f",p->data.n,p->data.name,p->data.price);
p=p->next;
}
return 1;
}
int getLinkList(LinkList L,char *a){
LinkList p= L->next;
int j=1;
while(p){
if(strcmp(p->data.name,a)){
p=p->next;
j++;
}
else return j;
}
if(p==NULL){
return 0;
}
}
int menu(){
int a;
printf("图书管理系统\n");
printf("1.创建 2.插入 3.删除\n");
printf("4.显示 5.查找 6.退出\n");
printf("请输入编号:");
scanf("%d",&a);
getchar();
return a;
}
int main(){
STD t;
LinkList n;
int a,m,b,d=1;
char *c;
while(1){
m = menu();
switch(m){
case 0 :initLinkList(&n) ; printf("初始化成功");break;
int createLinkList(LinkList *L) 函数做了修改,主函数里做了修改,其他函数未做调试,修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct {
int n;
char* name;
float price;
}STD;
typedef struct Lnode {
STD data;
struct Lnode* next;
}LNode, * LinkList;
int initLinkList(LinkList* L) //初始化
{
(*L) = (LNode*)malloc(sizeof(LNode));
if ((*L) == NULL)
return 0;
(*L)->next = NULL;
printf("初始化成功\n\n");
}
void createLinkList(LinkList L) { //int createLinkList(LinkList* L) 修改
int n = 0;
STD x;
x.name = (char*)malloc(sizeof(char) * 32); //修改
LinkList p, r = L;
char yn = 0;
do {
memset(x.name, 0, 32); //修改
printf("请输入书籍编号,名字,价格\n");
scanf("%d%s%f", &x.n, x.name, &x.price); //修改
//scanf("%d%s%f", &x.n, &x.name, &x.price);
getchar();
p = (LinkList)malloc(sizeof(LNode));
p->data.name = (char*)malloc(sizeof(char) * 32); //修改
p->data.n = x.n; //修改
strcpy(p->data.name, x.name); //修改
p->data.price = x.price; //修改
//p->data = x; //修改
p->next = NULL;
r->next = p;
r = p;
printf("是否继续输入,是按y,不是任意");
yn = getchar();
} while (yn == 'y' || yn == 'Y');
}
int insert(LinkList L, int i, STD x)//插入
{
LinkList p = L, s;
int pos = 0;
while (p != NULL && pos < i - 1) {
p = p->next;
pos++;
}
if (p == NULL || pos > i - 1) {
printf("插入位置有误\n");
}
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
return 1;
printf("插入成功\n");
}
int deleteLinkList(LinkList L, int i, STD d)//删除
{
LinkList p = L, q;
int pos = 0;
while (p != NULL && pos < i - 1) {
p = p->next;
pos = pos + 1;
}
while (p == NULL || pos < i - 1) {
printf("删除位置不合理");
return 0;
}
q = p->next;
p->next = q->next;
q->next->data = q->data;
free(q);
printf("删除成功");
}
int dispLinkList(LinkList L) {
LinkList p = L->next;
if (p == NULL) {
printf("没有数据");
}
while (p != NULL) {
printf("%d %s %f\n", p->data.n, p->data.name, p->data.price);
p = p->next;
}
return 1;
}
int getLinkList(LinkList L, char* a) {
LinkList p = L->next;
int j = 1;
while (p) {
if (strcmp(p->data.name, a)) {
p = p->next;
j++;
}
else return j;
}
if (p == NULL) {
return 0;
}
}
int menu() {
int a;
printf("\n图书管理系统\n");
printf("1.创建 2.插入 3.删除\n");
printf("4.显示 5.查找 6.退出\n");
printf("请输入编号:");
scanf("%d", &a);
getchar();
return a;
}
int main() {
STD t;
LinkList n;
int a, m, b, d = 1;
char* c;
initLinkList(&n); //修改
while (d) { //修改
m = menu();
switch (m) {
//case 0:initLinkList(&n); printf("初始化成功\n"); break; 修改
case 1:createLinkList(n); break; //修改
case 4:dispLinkList(n); break; //修改
case 6:d = 0; break; //修改
}
}
return 0;
}