#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
int k;
typedef struct Member
{
int number;
char name[10];
char gender;
int birth;
char yuanxi;
char zhiwu;
int sushehao;
int phonenumber;
};
void jiemian()
{
printf("簡單社團管理系統\n");
printf("選擇想要進行的操作:\n");
printf("1添加學生資訊 2洗掉學生資訊 3修改學生資訊 4查找學生資訊\n");
}
int rush(struct Member lib[]) //新成員入社
{
int i=1,k=0,a=1,b;//k用來記錄資料總量,lib[0]留空,從1開始
begin:if(a=1)
{
printf("請輸入學號:");
scanf("%d",&lib[i].number);
printf("請輸入姓名:");
scanf("%s",&lib[i].name);
printf("請輸入性別:");
scanf("%s",&lib[i].gender);
printf("請輸入生日:");
scanf("%d",&lib[i].birth);
printf("請輸入院系:");
scanf("%s",&lib[i].yuanxi);
printf("請輸入職務:");
scanf("%s",&lib[i].zhiwu);
printf("請輸入宿舍號:");
scanf("%d",&lib[i].sushehao);
printf("請輸入手機號:");
scanf("%d",&lib[i].phonenumber);
printf("繼續輸入按1,結束按0\n");//控制輸入的資料量
scanf("%d",&b);
k++;
i++;
return k;
if(b==1)
goto begin;
else break;//怎么通過輸入0控制跳出到界面,break報錯?
}
}
//必須輸入N個資訊才停止
int delete_member(struct Member lib[] ) //洗掉
{
int i=1,j;
char a[10];
printf("輸入所要洗掉同學的姓名:");
scanf("%s",&a);
while(strcmp(lib[i].name,a)!=0) i++;
//if (i=k+1) printf("查無此人");
for(j=i;i<=k;i++)
{
strcpy(lib[j].number,lib[j+1].number);// warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
strcpy(lib[j].name,lib[j+1].name);//different types for formal and actual parameter 1
strcpy(lib[j].gender,lib[j+1].gender);
strcpy(lib[j].birth,lib[j+1].birth);
strcpy(lib[j].yuanxi,lib[j+1].yuanxi);
strcpy(lib[j].zhiwu,lib[j+1].zhiwu);
strcpy(lib[j].sushehao,lib[j+1].sushehao);
strcpy(lib[j].phonenumber,lib[j+1].phonenumber);//為什么會報錯?
}
printf("已洗掉,按1回傳界面");
return(k-1);
}
void display(struct Member lib[])
{
int i;
i=k;
printf("該同學學號:%d",&lib[i].number);
printf("\n");
printf("該同學姓名:%s",&lib[i].name);
printf("\n");
printf("該同學性別:%s",&lib[i].gender);
printf("\n");
printf("該同學生日:%d",&lib[i].birth);
printf("\n");
printf("該同學院系:%s",&lib[i].yuanxi);
printf("\n");
printf("該同學職務:%s",&lib[i].zhiwu);
printf("\n");
printf("該同學宿舍號:%d",&lib[i].sushehao);
printf("\n");
printf("該同學電話號碼:%d",&lib[i].phonenumber);
printf("\n");
}
/*
int search(struct Member lib[])
{
int i;
char s[10];
for(i=1;i<=N;i++)
{
while(strcmp(lib[i].name,s)!=0)
break;
}
return i;
}//可能功能與下面函式重合 */
void searchname(struct Member lib[])//按名字查找
{
int i;
char s[10];
printf("請輸入同學名字");
scanf("%s",&s);
for (i=1;i<=N ;i++)
{
if(strcmp(lib[i].name,s)==0)
display(lib[i]);
// return i;//回傳找到的陣列下標
}
//if() printf("沒有相關資訊");//不論怎么都會執行這步,怎么能在沒找到的情況下執行這步?
}
//void search_num()
main()
{
int n,a;
struct Member lib[10];
begin:system("cls");
jiemian();
printf("輸入選項數字");
scanf("%d",&n);
while(n!=EOF&&n>0&&n<5)
{
switch(n)
{
case 1:
{
rush(lib);
break;
}
case 2:
{
delete_member(lib);
break;
}
case 4:
{
searchname(lib);
break;
}
}
}
printf("繼續輸入請按1,回傳界面請按0");
scanf("%d",&a);
if(a=1)
goto begin;//每一步執行完后回傳主界面
}
uj5u.com熱心網友回復:
int rush(struct Member lib[]) //新成員入社
{
int i=1,k=0,a=1,b;//k用來記錄資料總量,lib[0]留空,從1開始
begin:
if(a=1) // 這里是=還是 ==啊
{
printf("請輸入學號:");
scanf("%d",&lib[i].number);
printf("請輸入姓名:");
scanf("%s",&lib[i].name);
printf("請輸入性別:");
scanf("%s",&lib[i].gender); // char是用%s格式指定輸入嗎? 那%c做什么
printf("請輸入生日:");
scanf("%d",&lib[i].birth);
printf("請輸入院系:");
scanf("%s",&lib[i].yuanxi);
printf("請輸入職務:");
scanf("%s",&lib[i].zhiwu);
printf("請輸入宿舍號:");
scanf("%d",&lib[i].sushehao);
printf("請輸入手機號:");
scanf("%d",&lib[i].phonenumber);
printf("繼續輸入按1,結束按0\n");//控制輸入的資料量
scanf("%d",&b);
k++;
i++;
return k;
if(b==1)
goto begin;
else break;//怎么通過輸入0控制跳出到界面,break報錯?沒有for,while,switch何來的break;直接return
}
}
//必須輸入N個資訊才停止
int delete_member(struct Member lib[] ) //洗掉
{
int i=1,j;
char a[10];
printf("輸入所要洗掉同學的姓名:");
scanf("%s",&a);
while(strcmp(lib[i].name,a)!=0) i++;
//if (i=k+1) printf("查無此人");
for(j=i;i<=k;i++)
{
strcpy(lib[j].number,lib[j+1].number);// warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
strcpy(lib[j].name,lib[j+1].name);//different types for formal and actual parameter 1
strcpy(lib[j].gender,lib[j+1].gender);
strcpy(lib[j].birth,lib[j+1].birth);
strcpy(lib[j].yuanxi,lib[j+1].yuanxi);
strcpy(lib[j].zhiwu,lib[j+1].zhiwu);
strcpy(lib[j].sushehao,lib[j+1].sushehao);
strcpy(lib[j].phonenumber,lib[j+1].phonenumber);//為什么會報錯?
什么時候strcpy成萬能的賦值陳述句了, 除了char*型別,strcpy給別的型別賦不了值
}
printf("已洗掉,按1回傳界面");
return(k-1);
}
void display(struct Member lib[])
{
int i;
i=k;
printf("該同學學號:%d",&lib[i].number);
printf("\n");
printf("該同學姓名:%s",&lib[i].name);
printf("\n");
printf("該同學性別:%s",&lib[i].gender);
printf("\n");
printf("該同學生日:%d",&lib[i].birth);
printf("\n");
printf("該同學院系:%s",&lib[i].yuanxi);
printf("\n");
printf("該同學職務:%s",&lib[i].zhiwu);
printf("\n");
printf("該同學宿舍號:%d",&lib[i].sushehao);
printf("\n");
printf("該同學電話號碼:%d",&lib[i].phonenumber);
printf("\n");
}
/*
int search(struct Member lib[])
{
int i;
char s[10];
for(i=1;i<=N;i++)
{
while(strcmp(lib[i].name,s)!=0)
break;
}
return i;
}//可能功能與下面函式重合 */
void searchname(struct Member lib[])//按名字查找
{
int i;
char s[10];
printf("請輸入同學名字");
scanf("%s",&s);
for (i=1;i<=N ;i++)
{
if(strcmp(lib[i].name,s)==0)
display(lib[i]);
// return i;//回傳找到的陣列下標 為什么要注釋, 找到了就回傳
}
//if() printf("沒有相關資訊");//不論怎么都會執行這步,怎么能在沒找到的情況下執行這步?
前面找到了也不回傳,就必然會執行這里
}
看出錯的地方, 基礎的基礎的地方還沒有搞明白,就開始寫這么長的程式, 嫌給自己挖的坑不夠深啊 ; 先去學號基礎再來吧
uj5u.com熱心網友回復:
謝謝了大神,可是如果不用strcpy那塊怎么搞才能實作洗掉啊?uj5u.com熱心網友回復:
陣列里面的一個元素怎么洗掉, 不管是結構陣列,就當是int陣列,怎么洗掉里面的一個元素?兩種辦法, 把后面的所有的元素都往前移動一個,覆寫掉那個洗掉的元素,然后記錄下總的有效長度
另外一種辦法,把要洗掉的元素賦予一個特殊的值,標記這個元素是被洗掉的
問題是,洗掉和strcpy有個鬼關系啊
你用的是第一種辦法, 問題是兩個結構體直接直接之間賦值是怎么賦值的, 看書吧, 不想回答了
uj5u.com熱心網友回復:
有長者風范
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39514.html
標籤:模式及實現
下一篇:根據坐標求任意多邊形面積
