生活随笔
收集整理的這篇文章主要介紹了
学生表:用顺序表实现
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
學(xué)生表:順序表實(shí)現(xiàn)
/************************
實(shí)驗(yàn)內(nèi)容:
定義一個(gè)包含學(xué)生信息(學(xué)號(hào),姓名,成績(jī))的的順序表,使其具有如下功能:
(1)根據(jù)指定學(xué)生個(gè)數(shù),逐個(gè)輸入學(xué)生信息;
(2)逐個(gè)顯示學(xué)生表中所有學(xué)生的相關(guān)信息;
(3) 根據(jù)姓名進(jìn)行查找,返回此學(xué)生的學(xué)號(hào)和成績(jī);
(4)根據(jù)指定的位置可返回相應(yīng)的學(xué)生信息(學(xué)號(hào),姓名,成績(jī));
(5) 給定一個(gè)學(xué)生信息,插入到表中指定的位置;
(6)刪除指定位置的學(xué)生記錄;
(7) 統(tǒng)計(jì)表中學(xué)生個(gè)數(shù)。
************************/
#include <stdio.h>
#include <string.h>#define MAXSIZE 20 // 最多能存儲(chǔ)的學(xué)生人數(shù)
#define ERROR 0
#define OK 1//定義一個(gè)學(xué)生類(lèi)型
typedef struct student {char no[10]; //學(xué)號(hào)char name[20]; //姓名int score; //分?jǐn)?shù)
} STU;//定義一個(gè)學(xué)生信息的順序線(xiàn)性表
typedef struct {STU data[MAXSIZE]; //存儲(chǔ)學(xué)生信息int length; //表示學(xué)生當(dāng)前人數(shù)即線(xiàn)性表的長(zhǎng)度
} SqList;void SqInit(SqList *s) { s->length = 0; } //初始化順序表//輸入函數(shù)
void prin(SqList *s, int n);
//輸出函數(shù)
void output(SqList *s, int n);
//按內(nèi)容查找函數(shù)
void Locate(SqList *s, int n);
//按序號(hào)查找函數(shù)
void search(SqList *s, int n);
//插入函數(shù)
int Insert(SqList *s, int n);
//刪除函數(shù)
int Delete(SqList *s, int n);
//統(tǒng)計(jì)函數(shù)
void Statistics(SqList *s, int n);
//清空緩存區(qū)
void empty();//主函數(shù)
int main() {SqList std;int a;int exit = 0;while (exit != 1) {printf("--------------------------功能界面--------------------------\n");printf("1.添加學(xué)生\t2.顯示學(xué)生表\t3.按姓名查找學(xué)生\t4.按序號(hào)查找學(xué)生\n");printf("5.插入學(xué)生\t6.刪除學(xué)生信息\t7.統(tǒng)計(jì)學(xué)生人數(shù)\t\t8.退出\n");printf("------------------------------------------------------------\n");scanf("%d", &a);switch (a) {case 1:printf("請(qǐng)輸入學(xué)生人數(shù):");scanf("%d", &std.length);prin(&std, std.length);break;case 2:output(&std, std.length);break;case 3:Locate(&std, std.length);break;case 4:search(&std, std.length);break;case 5:if (Insert(&std, std.length)) {printf("----插入成功----\n");std.length += 1;}break;case 6:if (Delete(&std, std.length)) {printf("----刪除成功----\n");std.length -= 1;}break;case 7:Statistics(&std, std.length);break;case 8:exit = 1;break;default:printf("----輸入錯(cuò)誤----\n");break;}empty();}printf("----------------------\n");printf("^_^ 感謝使用學(xué)生表 ^_^\n");printf("----------------------\n");return 0;
}//輸入函數(shù)
void prin(SqList *s, int n) {int i;printf("請(qǐng)分別輸入每個(gè)學(xué)生的信息:\n");for (i = 0; i < n; i++) {printf("學(xué)號(hào):");scanf("%s", s->data[i].no);printf("姓名:");scanf("%s", s->data[i].name);printf("成績(jī):");scanf("%d", &s->data[i].score);printf("----------------------------------\n");}
}//輸出函數(shù)
void output(SqList *s, int n) {int i;printf("------學(xué)生表------\n");printf("學(xué)號(hào)\t姓名\t成績(jī)\n");for (i = 0; i < n; i++)printf("%s\t%s\t%d\n", s->data[i].no, s->data[i].name, s->data[i].score);
}//按內(nèi)容查找函數(shù)
void Locate(SqList *s, int n) {int i;char student_name[20];printf("請(qǐng)輸入想要查找學(xué)生的姓名:");scanf("%s", student_name);for (i = 0; i < n; i++)if (strcmp(student_name, s->data[i].name) == 0) //比較break;if (i < n) {printf("----學(xué)生信息如下----\n");printf("學(xué)號(hào)\t姓名\t成績(jī)\n");printf("%s\t%s\t%d\n", s->data[i].no, s->data[i].name, s->data[i].score);} elseprintf("----未找到此學(xué)生信息----\n");
}//按序號(hào)查找函數(shù)
void search(SqList *s, int n) {int i;printf("請(qǐng)輸入想要查找學(xué)生表序號(hào):");scanf("%d", &i);if (i <= n) {printf("----學(xué)生信息如下----\n");printf("學(xué)號(hào)\t姓名\t成績(jī)\n");printf("%s\t%s\t%d\n", s->data[i - 1].no, s->data[i - 1].name, s->data[i - 1].score); //數(shù)組從 0 開(kāi)始} elseprintf("----未找到該序號(hào)----\n");
}//插入函數(shù)
int Insert(SqList *s, int n) {int i, k;printf("輸入你想要插入的位置:");scanf("%d", &k);if (k < 1 || k > s->length + 1) {printf("---插入位置不合法---\n");return (ERROR);}if (s->length >= MAXSIZE - 1) {printf("----學(xué)生表已滿(mǎn)----\n");}for (i = s->length; i >= k - 1; i--) {strcpy(s->data[i + 1].no, s->data[i].no);strcpy(s->data[i + 1].name, s->data[i].name);s->data[i + 1].score = s->data[i].score;}printf("輸入新學(xué)生信息:\n");printf("學(xué)號(hào):");scanf("%s", s->data[k - 1].no);printf("姓名:");scanf("%s", s->data[k - 1].name);printf("成績(jī):");scanf("%d", &s->data[k - 1].score);return (OK);
}//刪除函數(shù)
int Delete(SqList *s, int n) {int i, k;printf("輸入你想要?jiǎng)h除的位置:");scanf("%d", &k);if (k < 1 || k >= s->length + 1) {printf("---刪除位置不合法---\n");return (ERROR);}for (i = k; i <= s->length; i++) {strcpy(s->data[i - 1].no, s->data[i].no);strcpy(s->data[i - 1].name, s->data[i].name);s->data[i - 1].score = s->data[i].score;}return (OK);
}//統(tǒng)計(jì)函數(shù)
void Statistics(SqList *s, int n) { printf("---當(dāng)前共有%d名學(xué)生---\n", s->length); }//清空緩存區(qū)
void empty() {char ch;while ((ch = getchar()) != '\n' && ch != EOF);
}
總結(jié)
以上是生活随笔為你收集整理的学生表:用顺序表实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。