#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int num;
char name[20];
char sex[5];
int age;
char spe[10];/*專業*/
int cla;/*班級*/
};
struct Node
{
struct student data;
struct Node* next;
};
//結構體變數表示表頭
struct Node* createlist()
{
struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));
if(headNode==NULL)
{
printf("申請空間失敗!\n");
exit(0);
}
headNode->next =NULL;
return headNode;
}
//創造節點
struct Node* createNode(struct student data)
{
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data =data;
newNode->next =NULL;
return newNode;
}
//列印鏈表
void printlist(struct Node* headNode)
{
struct Node* pMove=headNode->next ;
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
while(pMove)
{
printf("%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
pMove=pMove->next ;
}
printf("\n");
}
//插入節點(頭插法)
void insertNodeByHead(struct Node* headNode,struct student data)
{
struct Node* newNode=createNode(data);
newNode->next=headNode->next ;
headNode->next=newNode;
}
//洗掉
void deleteAppoinNode(struct Node* headNode,char* name)
{
struct Node* posNode=headNode->next ;
struct Node* posFrontNode=headNode;
if(posNode==NULL)
{
printf("資料為空,無法洗掉!\n");
return;
}
while(strcmp(posNode->data .name ,name))
{
posFrontNode=posNode;
posNode=posFrontNode->next;
if(posNode==NULL)
{
printf("未找到指定位置無法洗掉。\n");
return;
}
}
posFrontNode->next=posNode->next ;
free(posNode);
}
//查詢功能
struct Node* searchInfoByData(struct Node* headNode,char* name)
{
struct Node* pMove=headNode->next ;
if(pMove==NULL)
return NULL;
while(strcmp(pMove->data .name ,name))
{
pMove=pMove->next ;
}
return pMove;
}
//檔案讀操作
/*void readInfoFromFile(struct Node* headNode,char *fileName)
{
FILE *fp;
struct student data;
fp=fopen(fileName,"r");
if(fp==NULL);
{
fp=fopen(fileName,"w+");
}
while(fscanf(fp,"%d\t%s\t%s\t%d\t%s\t%d\n",&data.num ,data.name ,data.sex ,&data.age ,data.spe ,&data.cla )!=EOF)
{
insertNodeByHead(headNode,data);
}
fclose(fp);
}
//檔案寫操作
void writeInfoToFile(struct Node* headNode,char *fileName)
{
FILE *fp;
struct Node* pMove=headNode->next ;
fp=fopen(fileName,"w");
while(pMove)
{
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
pMove=pMove->next ;
}
fclose(fp);
}
*/
void menu()
{
printf("----------------------------------------------------\n");
printf("---------------【學生資訊管理系統】-----------------\n");
printf("-------------------1、錄入資訊----------------------\n");
printf("-------------------2、查詢資訊----------------------\n");
printf("-------------------3、洗掉資訊----------------------\n");
printf("-------------------4、瀏覽資訊----------------------\n");
printf("----------------------------------------------------\n");
}
void keyDown()
{
struct Node* list=createlist();
int choice=0;
struct student data;
struct Node* pMove=NULL;
printf("請輸入你的選擇:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("---------------【錄入資訊】----------------\n");
printf("請輸入學生學號,姓名,性別,年齡,專業,班級:");
scanf("%d%s%s%d%s%d",&data.num ,data.name ,data.sex ,&data.age ,data.spe ,&data.cla );
insertNodeByHead(list,data);
break;
case 2:
printf("---------------【查詢資訊】----------------\n");
printf("請輸入要查找的學生姓名:");
scanf("%s",data.name );
pMove=searchInfoByData(list,data.name );
if(pMove==NULL)
{
printf("未找到相關資訊、無法查詢!\n");
system("pause");
}
else
{
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
printf("%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
}
break;
case 3:
printf("---------------【洗掉資訊】----------------\n");
printf("請輸入洗掉的學生姓名:");
scanf("%s",data.name );
deleteAppoinNode(list,data.name );
break;
case 4:
printf("---------------【瀏覽資訊】----------------\n");
printlist(list);
break;
default:
printf("選擇錯誤,請重新輸入。\n");
system("pause");
break;
}
/*writeInfoToFile(list,"student.txt");*/
}
int main()
{
struct Node* list=createlist();
/*readInfoFromFile(list,"student.txt");*/
while(1)
{
menu();
keyDown();
system("pause");
system("cls");
}
system("pause");
return 0;
}
uj5u.com熱心網友回復:
資料結構對單鏈表進行資料排序 http://bbs.csdn.net/topics/392201633uj5u.com熱心網友回復:
我從選單選擇錄入資訊 錄入資料后回到選單資料就沒了
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
int num;
char name[20];
char sex[5];
int age;
char spe[10];/*專業*/
int cla;/*班級*/
};
struct Node {
struct student data;
struct Node* next;
};
struct Node* list;
//結構體變數表示表頭
struct Node* createlist() {
struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));
if(headNode==NULL) {
printf("申請空間失敗!\n");
exit(0);
}
headNode->next =NULL;
return headNode;
}
//創造節點
struct Node* createNode(struct student data) {
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data =data;
newNode->next =NULL;
return newNode;
}
//列印鏈表
void printlist(struct Node* headNode) {
struct Node* pMove=headNode->next ;
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
while(pMove) {
printf("%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
pMove=pMove->next ;
}
printf("\n");
}
//插入節點(頭插法)
void insertNodeByHead(struct Node* headNode,struct student data) {
struct Node* newNode=createNode(data);
newNode->next=headNode->next ;
headNode->next=newNode;
}
//洗掉
void deleteAppoinNode(struct Node* headNode,char* name) {
struct Node* posNode=headNode->next ;
struct Node* posFrontNode=headNode;
if(posNode==NULL) {
printf("資料為空,無法洗掉!\n");
return;
}
while(strcmp(posNode->data .name ,name)) {
posFrontNode=posNode;
posNode=posFrontNode->next;
if(posNode==NULL) {
printf("未找到指定位置無法洗掉。\n");
return;
}
}
posFrontNode->next=posNode->next ;
free(posNode);
}
//查詢功能
struct Node* searchInfoByData(struct Node* headNode,char* name) {
struct Node* pMove=headNode->next ;
if(pMove==NULL)
return NULL;
while(strcmp(pMove->data .name ,name)) {
pMove=pMove->next ;
}
return pMove;
}
//檔案讀操作
/*
void readInfoFromFile(struct Node* headNode,char *fileName)
{
FILE *fp;
struct student data;
fp=fopen(fileName,"r");
if(fp==NULL);
{
fp=fopen(fileName,"w+");
}
while(fscanf(fp,"%d\t%s\t%s\t%d\t%s\t%d\n",&data.num ,data.name ,data.sex ,&data.age ,data.spe ,&data.cla )!=EOF)
{
insertNodeByHead(headNode,data);
}
fclose(fp);
}
//檔案寫操作
void writeInfoToFile(struct Node* headNode,char *fileName)
{
FILE *fp;
struct Node* pMove=headNode->next ;
fp=fopen(fileName,"w");
while(pMove)
{
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
pMove=pMove->next ;
}
fclose(fp);
}
*/
void menu() {
printf("----------------------------------------------------\n");
printf("---------------【學生資訊管理系統】-----------------\n");
printf("-------------------1、錄入資訊----------------------\n");
printf("-------------------2、查詢資訊----------------------\n");
printf("-------------------3、洗掉資訊----------------------\n");
printf("-------------------4、瀏覽資訊----------------------\n");
printf("----------------------------------------------------\n");
}
void keyDown() {
int choice=0;
struct student data;
struct Node* pMove=NULL;
printf("請輸入你的選擇:");
scanf("%d",&choice);
switch(choice) {
case 1:
printf("---------------【錄入資訊】----------------\n");
printf("請輸入學生學號,姓名,性別,年齡,專業,班級:");
scanf("%d%s%s%d%s%d",&data.num ,data.name ,data.sex ,&data.age ,data.spe ,&data.cla );
insertNodeByHead(list,data);
break;
case 2:
printf("---------------【查詢資訊】----------------\n");
printf("請輸入要查找的學生姓名:");
scanf("%s",data.name );
pMove=searchInfoByData(list,data.name );
if(pMove==NULL) {
printf("未找到相關資訊、無法查詢!\n");
system("pause");
} else {
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
printf("%d\t%s\t%s\t%d\t%s\t%d",pMove->data.num ,pMove->data.name ,pMove->data.sex ,pMove->data.age ,pMove->data.spe ,pMove->data.cla );
}
break;
case 3:
printf("---------------【洗掉資訊】----------------\n");
printf("請輸入洗掉的學生姓名:");
scanf("%s",data.name );
deleteAppoinNode(list,data.name );
break;
case 4:
printf("---------------【瀏覽資訊】----------------\n");
printlist(list);
break;
default:
printf("選擇錯誤,請重新輸入。\n");
system("pause");
break;
}
/*writeInfoToFile(list,"student.txt");*/
}
int main() {
list=createlist();
/*readInfoFromFile(list,"student.txt");*/
while(1) {
menu();
keyDown();
system("pause");
system("cls");
}
system("pause");
return 0;
}
uj5u.com熱心網友回復:
你在主函式里做回圈,多次呼叫keyDown函式,每次進入keyDown函式的時候都新建一個鏈表,所以...
uj5u.com熱心網友回復:
這。。。。什么原因 。uj5u.com熱心網友回復:
懂了懂了 謝了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266042.html
標籤:新手樂園
上一篇:看圖
下一篇:亂碼
