紧急求助:C语言编程设计

时间:2022-10-03 19:35:16
本人急需编写一道C语言程序题,请各位网络高手帮帮忙,谢谢! 
题目如下: 
图书信息管理系统: 
要求:1、主界面以菜单形式显示其主要功能 
2、要有显示增加、插入、删除、排序及存取功能 
Book Information System 
L=List all records 
D=Delete a records 
A=Append records 
I=Insert records 
S=Sort record 
H=Show this help message 
V=Save to a file 
O=Load from a file 
C=Clear scream 
Q=Quit system 
3、以链表为结构创建该数据库 
Struct Book-Info 
{unsigned ID; 
unsinned ISBN; 
char title[41]; 
char auther [11]; 
char press [21]; 
data pub-data; 
struct Book -Info *next;};
各位大哥大姐帮帮忙啊~~~~~~~~~~
小妹在此有礼了!

5 个解决方案

#1


分太少了,都对不起观众!!

#2


你那么在乎那个吗?人家是新手啊,或许还不清楚那个分数是怎么回事呢?

#3


好象很好搞呀……呵呵
我上个学期才做了的
区别不大
你要不要?
我给你
好象你说的几个功能我都有
你稍微改一改应该就好了

#include<iostream>
#include<string>
#include <iomanip>
using namespace std;

typedef struct
{
string name;
string age;
string sex;
string num;
}student;//学生信息

typedef struct slnode
{
student data;
struct slnode *next;
}stud;//学生链表的存储结构

int init(stud **p)
{//初始化头节点
if(!(*p=new stud))
{//初始化分配内存失败
cout<<"初始化失败!"<<endl;
return 0;
}
(*p)->next=NULL;
return 1;//初始化成功
}

int insert(stud *p,int i,student x)
{//插入元素x到链表中第i个元素之前
stud *h;
stud *s;
int j=0;
h=p;
while(j<i-1&&h->next!=NULL)
{//找到第i-1个节点
h=h->next;
j++;
}
if(j!=i-1)
{//未找到第i-1个位置
cout<<"插入位置不合理"<<endl;
return 0;
}
if(!(s=new stud))
{//为新插入的元素分配内存失败
cout<<"分配内存失败"<<endl;
return 0;
}
s->data=x;
s->next=h->next;
h->next=s;
return 1;
}

int delet(stud *p,string name1)
{//删除链表p中名字为name1的元素
stud *h;
stud *s;
int j=0;
int i=1;
h=p;
while(h!=NULL)
{
if(h->data.name!=name1)
{
i++;
h=h->next;
}//找要删除的学生的位置
else break;
}
if(h==NULL)//没有这个学生
{
cout<<"没有这个学生!"<<endl;
return 0;
}
    h=p;
while(j<i-2&&h->next!=NULL)
{//找到第i-1个节点
h=h->next;
j++;
}
if(j!=i-2)
{//没有找到第i-1个元素
        cout<<"删除位置不合理"<<endl;

return 0;
}
s=h->next;//找到第i个节点,并用s指向它
h->next=s->next;
free(s);//释放删除的节点的空间
cout<<"删除学生"<<name1<<"的信息成功!"<<endl;
return 1;
}

void output(stud *h)
{//输出表
stud *p;
int j=0;
p=h->next;
cout<<left<<setw(20)<<"学号"<<left<<setw(20)<<"姓名"
<<left<<setw(20)<<"年龄"
<<setw(20)<<"性别";

while(p!=NULL)
{   
cout<<left<<setw(20)<<p->data.num<<left<<setw(20)
<<p->data.name<<left<<setw(20)
<<p->data.age<<left<<setw(20)
<<p->data.sex;
j++;//j用来记录输出的个数
p=p->next;
};
if(j==0)
{
cout<<"这是个空表!"<<endl;
}
}

void input(student *y)
{//控制输入数据的函数,将学生信息记录到y中
cout<<"请输入学生的信息:"<<endl;
cout<<"姓名:";
cin>>y->name;
cout<<"年龄:";
cin>>y->age;
cout<<"性别:";
cin>>y->sex;
cout<<"学号:";
cin>>y->num;
}

main()
{
student x;
stud *list;
int i;
char a='z';
string name2;
init(&list);
while(a!='x')
{
cout<<"\t\t这个程序用来操作学生信息链表"<<endl;
if(list->next==NULL)
cout<<"当前表中无任何信息,请先输入!"<<endl;
cout<<"a-->插入一个新的学生信息到表中"<<endl;
cout<<"b-->删除一个学生的信息"<<endl;
cout<<"c-->输出当前学生信息表"<<endl;
cout<<"x-->退出程序"<<endl;
cout<<"请选择:";
cin>>a;
if(a=='a')
{//输入学生信息并插入到指定位置
input(&x);
cout<<"请输入要插入的位置:";
cin>>i;
if(insert(list,i,x))
cout<<"插入成功!"<<endl;
}
if(a=='b')
{//输入学生姓名并删除
cout<<"请输入要删除的学生的名字:";
cin>>name2;
delet(list,name2);
}
    if(a=='c')
{//输出学生信息表
output(list);
}
cout<<"c键继续!\n其他键退出!"<<endl;
char z;
cin>>z;
if(z=='c') continue;
else break;
}
return 1;
}












#4


谢谢大家的回复,但是我要的是c不是c++,再次谢谢您的回复!

#5


要变成C也很简单呀
你把我里面的头文件改成include<stdio.h>
include<string.h>
然后里面的new语句改成malloc,cout和cin改成printf和scanf就可以了
我没有用到对象,还要改的就是所有的字符串副制你用一个for来完成就应该没有问题了

#1


分太少了,都对不起观众!!

#2


你那么在乎那个吗?人家是新手啊,或许还不清楚那个分数是怎么回事呢?

#3


好象很好搞呀……呵呵
我上个学期才做了的
区别不大
你要不要?
我给你
好象你说的几个功能我都有
你稍微改一改应该就好了

#include<iostream>
#include<string>
#include <iomanip>
using namespace std;

typedef struct
{
string name;
string age;
string sex;
string num;
}student;//学生信息

typedef struct slnode
{
student data;
struct slnode *next;
}stud;//学生链表的存储结构

int init(stud **p)
{//初始化头节点
if(!(*p=new stud))
{//初始化分配内存失败
cout<<"初始化失败!"<<endl;
return 0;
}
(*p)->next=NULL;
return 1;//初始化成功
}

int insert(stud *p,int i,student x)
{//插入元素x到链表中第i个元素之前
stud *h;
stud *s;
int j=0;
h=p;
while(j<i-1&&h->next!=NULL)
{//找到第i-1个节点
h=h->next;
j++;
}
if(j!=i-1)
{//未找到第i-1个位置
cout<<"插入位置不合理"<<endl;
return 0;
}
if(!(s=new stud))
{//为新插入的元素分配内存失败
cout<<"分配内存失败"<<endl;
return 0;
}
s->data=x;
s->next=h->next;
h->next=s;
return 1;
}

int delet(stud *p,string name1)
{//删除链表p中名字为name1的元素
stud *h;
stud *s;
int j=0;
int i=1;
h=p;
while(h!=NULL)
{
if(h->data.name!=name1)
{
i++;
h=h->next;
}//找要删除的学生的位置
else break;
}
if(h==NULL)//没有这个学生
{
cout<<"没有这个学生!"<<endl;
return 0;
}
    h=p;
while(j<i-2&&h->next!=NULL)
{//找到第i-1个节点
h=h->next;
j++;
}
if(j!=i-2)
{//没有找到第i-1个元素
        cout<<"删除位置不合理"<<endl;

return 0;
}
s=h->next;//找到第i个节点,并用s指向它
h->next=s->next;
free(s);//释放删除的节点的空间
cout<<"删除学生"<<name1<<"的信息成功!"<<endl;
return 1;
}

void output(stud *h)
{//输出表
stud *p;
int j=0;
p=h->next;
cout<<left<<setw(20)<<"学号"<<left<<setw(20)<<"姓名"
<<left<<setw(20)<<"年龄"
<<setw(20)<<"性别";

while(p!=NULL)
{   
cout<<left<<setw(20)<<p->data.num<<left<<setw(20)
<<p->data.name<<left<<setw(20)
<<p->data.age<<left<<setw(20)
<<p->data.sex;
j++;//j用来记录输出的个数
p=p->next;
};
if(j==0)
{
cout<<"这是个空表!"<<endl;
}
}

void input(student *y)
{//控制输入数据的函数,将学生信息记录到y中
cout<<"请输入学生的信息:"<<endl;
cout<<"姓名:";
cin>>y->name;
cout<<"年龄:";
cin>>y->age;
cout<<"性别:";
cin>>y->sex;
cout<<"学号:";
cin>>y->num;
}

main()
{
student x;
stud *list;
int i;
char a='z';
string name2;
init(&list);
while(a!='x')
{
cout<<"\t\t这个程序用来操作学生信息链表"<<endl;
if(list->next==NULL)
cout<<"当前表中无任何信息,请先输入!"<<endl;
cout<<"a-->插入一个新的学生信息到表中"<<endl;
cout<<"b-->删除一个学生的信息"<<endl;
cout<<"c-->输出当前学生信息表"<<endl;
cout<<"x-->退出程序"<<endl;
cout<<"请选择:";
cin>>a;
if(a=='a')
{//输入学生信息并插入到指定位置
input(&x);
cout<<"请输入要插入的位置:";
cin>>i;
if(insert(list,i,x))
cout<<"插入成功!"<<endl;
}
if(a=='b')
{//输入学生姓名并删除
cout<<"请输入要删除的学生的名字:";
cin>>name2;
delet(list,name2);
}
    if(a=='c')
{//输出学生信息表
output(list);
}
cout<<"c键继续!\n其他键退出!"<<endl;
char z;
cin>>z;
if(z=='c') continue;
else break;
}
return 1;
}












#4


谢谢大家的回复,但是我要的是c不是c++,再次谢谢您的回复!

#5


要变成C也很简单呀
你把我里面的头文件改成include<stdio.h>
include<string.h>
然后里面的new语句改成malloc,cout和cin改成printf和scanf就可以了
我没有用到对象,还要改的就是所有的字符串副制你用一个for来完成就应该没有问题了