求100行左右的代码(C语言,c++,数据结构编写的均可)

希望能有算法思想以及程序功能等!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10
struct library {
int num;
char book_name[30];
char writer[30];
char sort_num[3];
char pub_company[30];
char pub_time[30];
char prise[30];
};
typedef struct library LIB; /*结构体的定义用于存放书籍及借书的信息*/
LIB lib[N];
FILE *fp; int all=0;
int menu(void);
void input(void);
void output(void);
void save(void);
void del(void);
void search(void);
void xiugai(void);
main()
{
for(;;)
{
switch(menu()) {
case 1:input();break;
case 2:output();break;
case 3:save();break;
case 4:search();break;
case 5:xiugai();break;
case 6:del();break;
case 7:sort();break;
case 0:exit(1);break;
} /*SWITCH定义函数输出*/

}
}
int menu(void)
{
char m[3];
int n; printf(" *********************WELCOME**********************\n\n\n\n\n");
printf("\t\t\t-----图书信息管理系统----\n");
printf("\t\t1:输入\n");
printf("\t\t2:输出\n");
printf("\t\t3:保存\n");
printf("\t\t4:查找\n");
printf("\t\t5:修改\n");
printf("\t\t6:删除\n");
printf("\t\t7:统计\n");
printf("\t\t0:退出\n");
printf("\t\tplease choose a operation(0-6):\n");
scanf("%s",m);
n=atoi(m);
return(n);
} /*主要界面*/
void input(void)
{
int i;
char m[3];
for(i=all;i<N;i++)
{
all++;
printf("请输入信息:\n");
printf("\t\t号码:\n");
scanf("%d",&lib[i].num);
printf("\t\t书名:\n");
scanf("%s",lib[i].book_name);
printf("\t\t作者:\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:\n");
scanf("%s",lib[i].sort_num);
printf("\t\t出版商:\n");
scanf("%s",lib[i].pub_company);
printf("\t\t出版时间:\n");
scanf("%s",lib[i].pub_time);
printf("\t\t价格:\n");
scanf("%s",lib[i].prise);
a: printf("\t\tyes/哦了?\n");
printf("\t\t1:yes\n");
printf("\t\t2:no\n");
scanf("%s",m);
if(atoi(m)==1)
continue;
else if(atoi(m)==2)
return;
else
{
printf("\t\t错误!\n");
goto a;
} /* 输入条件查找*/
}
}
void output(void)
{
int i;
for(i=0;i<all;i++)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
}
} /*输出书名作者出版时间价格等*/
void save(void)
{
int i;
if((fp=fopen("file.c","wb"))==NULL)
{
printf("can not open the file");
exit(1);
}
for(i=0;i<all;i++)
{
if(fwrite(&lib[i],sizeof(LIB),1,fp)!=1)
{
printf("can not write!");
exit(1);
}
} /*条件不符合时拒绝存储*/
fclose(fp);
}
void search(void)
{
int i,flag;
char m[3];
char name[30];
printf("\t\t请选择您的存储方式:\n");
printf("\t\t1:按书名!\n");
printf("\t\t2:按作者!\n");
scanf("%s",m);
i=atoi(m);
switch(i)
{
case 1:{
printf("\t\t请输入书名:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t没有这本书!\n");

}
case 2:{
printf("\t\t请输入作者:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].writer)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t没有这个作者!\n");
}
} /*查找图书按书名或作者并输出*/
}
void xiugai(void)
{
int i,flag;
char name[30],n[3];
printf("\t\t请输入要修改的书名 :\n");
scanf("%s",name); /*修改书名*/
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
printf("\t\tplease input xiugai's the informations:\n");
printf("\t\tnum:\n");
scanf("%d",&lib[i].num);
printf("\t\tbook_name:\n");
scanf("%s",lib[i].book_name);
printf("\t\twriter:\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:\n");
scanf("%s",lib[i].sort_num);
printf("\t\tpub_company:\n");
scanf("%s",lib[i].pub_company);
printf("\t\tpub_time:\n");
scanf("%s",lib[i].pub_time);
printf("\t\tprise:\n");
scanf("%s",lib[i].prise);
flag=1;break;
}
} /*增加图书*/
if(flag==0)
printf("\t\t没有找到啊!\n");
}
void del(void)
{
int i,j,flag;
char name[30];
printf("\t\t请输入要删除的书名:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
for(j=N;j>i;j--)
{
lib[j-1].num=lib[j].num;
strcpy(lib[j-1].book_name,lib[j].book_name);
strcpy(lib[j-1].writer,lib[j].writer);
strcpy(lib[j-1].sort_num,lib[j].sort_num);
strcpy(lib[j-1].pub_company,lib[j].pub_company);
strcpy(lib[j-1].pub_time,lib[j].pub_time);
strcpy(lib[j-1].prise,lib[j].prise);
flag=1;
printf("\t\t已经删除!\n");
break;
}
}
}
if(flag==0)
printf("\t\t没有这本书!\n");
} /*删除图书*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-24
10转8进制《带小数点和负数的运算》
算法思想:整数部分,由于转换的方法刚好复合栈先进后出的规律,直接进栈读数,小数部分,由于和整数部分相反,如果要进入栈的话,出栈后先存入数组,再从后向前读出,关于小数点的输入,在8进制的数中必定不存在9这个数字,判断若输入的数为带小数的数字,则置flag2为1,转换函数中若flag2为1,将flag=9入栈,输出时,若输出的栈内数为9则输出小数点,其他均输入该数本身。
#include<stdio.h>
#include<malloc.h>
#include<math.h>
typedef struct Stack
{
int data;
struct Stack *next;
}StackNode,*LinkStack;
LinkStack Init_linkstack()
{return NULL;}
LinkStack Push(LinkStack top,int x)
{LinkStack s;
s=(LinkStack)malloc(sizeof(StackNode));
s->data=x;
s->next=top;
top=s;
return top;
}
LinkStack Pop(LinkStack top)
{int a;
if(top==NULL)return NULL;
a=(top->data);
top=top->next;

return top;
}
int readtop(LinkStack top)
{int a;
if(top==NULL)return NULL;
a=(top->data);
return a;
}
int treat1(int N)
{
return N%8;
}
float treat2(float c)
{
return c*8;
}
void main()
{ LinkStack top;
int N,a,t,i,k,j,flag1,flag2,b[5];
float D,p;
printf("please input a data:\n");
scanf("%f",&D);
if(D<0)
{printf("-");
D=fabs(D);}
N=D;
if(N==0)printf("0");
p=D-N;
if(p==0)flag2=0;
else flag2=1;
i=-1;
flag1=9;
top=Init_linkstack();
while(p!=0)
{p=treat2(p);
if(p<1)
p=treat2(p);
t=p;
p=p-t;
top=Push(top,t);
i++;
}
k=i;
while(i>=0)
{b[i--]=readtop(top);
top=Pop(top);}
while(k>=0)
top=Push(top,b[k--]);
if(flag2==1)
top=Push(top,flag1);
while(N!=0)
{a=treat1(N);
top=Push(top,a);
N=N/8;
}
while(top!=NULL)
{ j=readtop(top);
if(j!=9)
printf("%d",j);
else printf(".");
top=Pop(top);
}
printf("\n");
}本回答被提问者和网友采纳
第2个回答  2010-11-25
#include<iostream>
using namespace std;
void QuickSort(int *pData,int left,int right)
{
int i(left),j(right),middle(0),iTemp(0);
middle=pData[(left+right)/2];//求中间值
middle=pData[(rand()%(right-left+1))+left]; //生成大于等于left小于等于right的随机数
do{
while((pData[i]<middle)&&(i<right))//从左扫描大于中值的数
i++;
while((pData[j]>middle) && (j>left))//从右扫描小于中值的数
j--;
//找到了一对值,交换
if(i<=j){
iTemp=pData[j];
pData[j]=pData[i];
pData[i]=iTemp;
i++;
j--;
}
}while(i<=j);//如果两边扫描的下标交错,就停止(完成一次)
//当左边部分有值(left<j),递归左半边
if(left<j){
QuickSort(pData,left,j);
}
//当右边部分有值(right>i),递归右半边
if(right>i){
QuickSort(pData,i,right);
}
}
int main()
{
int data[]={10,9,8,7,6,5,4};
const int count(6);
QuickSort(data,0,count);
for(int i(0);i!=7;++i){
cout<<data[i]<<“ ”<<flush;
}
cout<<endl;
return 0;
}
第3个回答  2010-11-24
费氏搜寻法

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define INT_MIN -9999

void createFibonacci(int[], int); // 建立费氏数列
int findY(int[], int); // 找Y值
int fibonacciSearch(int[], int, int); // 费氏搜寻

int main(void) {
int number[] = {1, 2, 3, 5, 6, 8, 9, 10, 11};
int length = sizeof(number) / sizeof(int);

printf("数列:");
int i;
for(i = 0; i < length; i++)
printf("%d ", number[i]);

printf("\n输入寻找对象:");
int find;
scanf("%d", &find);

if((i = fibonacciSearch(number, length, find)) >= 0)
printf("找到数字於索引 %d ", i);
else
printf("\n找不到指定数");

printf("\n");

return 0;
}

// 建立费氏数列
void createFibonacci(int Fib[], int length) {
Fib[0] = 0;
Fib[1] = 1;
int i;
for(i = 2; i < length; i++)
Fib[i] = Fib[i-1] + Fib[i-2];
}

// 找 y 值
int findY(int Fib[], int n) {
int i = 0;
while(Fib[i] <= n) i++;
i--;
return i;
}

// 费式搜寻
int fibonacciSearch(int number[], int length, int find) {
int* Fib = malloc(length * sizeof(int));
int f;
for(f = 0; f < length; f++) {
Fib[f] = INT_MIN;
}

createFibonacci(Fib, length);

int y = findY(Fib, length + 1);
int m = length - Fib[y];
int x = y - 1;
// printf("\nx = %d, m = %d, Fib[x] = %d\n\n", x, m, Fib[x]);
int i = x;
if(number[i] < find)
i += m;

int result = -1;
while(Fib[x] > 0) {
if(number[i] < find)
i += Fib[--x];
else if(number[i] > find)
i -= Fib[--x];
else {
result = i;
break;
}
}

free(Fib);

return result;
}
第4个回答  2010-11-26
#include<iostream>
using namespace std;

typedef struct _List{
int list[50];
int size;
}List;

List MyList;

static int last = -1;

void insertValue(int value)
{
if(last == 49)
return;

for(int index = 0; index <= last; index++)
{
if(value <= MyList.list[index])
{
for(int index2 = last; index2 >= index; index2--)
{
MyList.list[index2+1] = MyList.list[index2];
}
MyList.list[index] = value;
last++;
return;
}
}
MyList.list[++last] = value;
}

int hasValue(int value)
{
for(int index = 0; index <= last; index++)
{
if(MyList.list[index] == value)
{
return index;
}
}

return -1;
}

void deleteValue(int value)
{
int valueIndex;

if(last == -1)
return;

valueIndex = hasValue(value);

while(valueIndex != -1)
{
for(int index = valueIndex; index < last; index++ )
{
MyList.list[index] = MyList.list[index+1];
}
last--;
valueIndex = hasValue(value);
}
}

void printList()
{
for(int index = 0; index <= last; index++)
{
cout<<MyList.list[index]<<" ";
}
}

int main()
{
int array[10] = {8,6,9,7,2,5,1,4,3,5};

for(int index = 0; index < 10; index++)
{
insertValue(array[index]);
}

printList();
cout<<endl;

deleteValue(5);
printList();
cout<<endl;

insertValue(0); insertValue(100);
printList();
cout<<endl;

return 0;
}
相似回答