C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
/*copyright(c)2016.煙臺大學(xué)計(jì)算機(jī)學(xué)院
* All rights reserved,
* 文件名稱:text.Cpp
* 作者:吳敬超
* 完成日期:2016年7月1日
* 版本號:codeblock
*
* 問題描述: 學(xué)生信息管理系統(tǒng)
* 輸入描述:
* 程序輸出: 輸出結(jié)果
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>
# define LEN sizeof(struct Student)
struct Student {
char num[100]; //學(xué)號
char name[200]; //姓名
char sex[100]; //性別
int age; //年齡
char phone[120]; //電話
char address[120]; //地址
char birthday[200]; //生日
char mail[200] ; //郵件
struct Student *next;
};
void menu();
void start();
void welcome();
char filename[30];//全局變量,用來保存要打開的文件名字
struct Student *Creat(int n);
//生成鏈表
struct Student *Creat(int n)
{
void menu_print_in(void);
struct Student *head;
struct Student *p1, *p2;
system("cls");
for(int i=1;i<n+1;i++) {
p1 = (struct Student*)malloc(LEN);
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p1->num,p1->name,p1->sex,
&p1->age,p1->phone,p1->address,p1->birthday,p1->mail);
p1->next = NULL;
if(i==1)
{
head = p2 = p1;
}
else {
p2->next = p1;
p2 = p1;
}
}
return(head);
}
//數(shù)據(jù)存盤(wb只寫)
void WriteData_wb(struct Student *head) {
FILE *fp;
struct Student *p;
if((fp = fopen(filename, "wb"))==NULL)
printf("\a 文件打開錯誤");
p = head;
while(p!=NULL) {
if(fwrite(p,LEN,1,fp)!=1) {
printf("寫入數(shù)據(jù)出錯\n");
fclose(fp);
return;
}
p=p->next;
}
fclose(fp);
}
//數(shù)據(jù)存盤(ab追加)
void WriteData_ab(struct Student *head)
{
FILE *fp;
struct Student *p;
if((fp = fopen(filename, "ab"))==NULL)
printf("\a 文件打開錯誤!");
p = head;
while(p!=NULL) {
if(fwrite(p,LEN,1,fp)!=1) {
printf("寫入數(shù)據(jù)出錯\n");
fclose(fp);
return;
}
p=p->next;
}
fclose(fp);
}
//讀取數(shù)據(jù)文件保存到鏈表中 ,返回指向此鏈表頭指針
struct Student *ReadData(void)
{
struct Student *head = NULL;
struct Student *p1, *p2;//s = p1;p = p2;
FILE *fp;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("打開文件出錯\n");
exit(0);
}
while(!feof(fp)) {
if((p1=(struct Student*)malloc(LEN))==NULL){
printf("內(nèi)存申請出錯\n");
fclose(fp);
exit(0);
}
if(fread(p1,LEN,1,fp)!=1){
free(p1);
break;
}
if(head==NULL)
head=p2=p1;
else{
p2->next=p1;
p2=p1;
}
}
fclose(fp);
return (head);
}
//全部查詢
void display()
{
system("cls");
void menu_print_out(void);
struct Student *p;
p = ReadData();
menu_print_out();
do
{
printf("%-10s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->sex,
p->age,p->phone,p->address,p->birthday,p->mail);
p = p->next;
printf("\n\n");
}while(p!=NULL);
printf("\n\n");
}
//學(xué)號查詢
int query_num()
{
system("cls");
void menu_print_out();
struct Student *p;
char str_num[10];
printf("請輸入您要查詢的學(xué)號:");
scanf("%s", str_num);
p = ReadData();
menu_print_out();
do {
if(strcmp(p->num,str_num)==0) {
printf("%-10s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->sex,
p->age,p->phone,p->address,p->birthday,p->mail);
printf("\n\n");
return 0;
}
p = p->next;
}while(p!=NULL);
printf("數(shù)據(jù)庫中沒有存儲您要查詢的數(shù)據(jù)!\n");
printf("\n\n");
return 0;
}
//姓名查詢
int query_name()
{
system("cls");
void menu_print_out(void);
struct Student *p;
char str_name[20];
printf("請輸入您要查詢的姓名:");
scanf("%s", str_name);
p = ReadData();
menu_print_out();
do {
if(strcmp(p->name,str_name)==0)
{
printf("%-8s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->sex,
p->age,p->phone,p->address,p->birthday,p->mail);
printf("\n\n");
return 0;
}
p = p->next;
}while(p!=NULL);
printf("數(shù)據(jù)庫中沒有存儲您要查詢的數(shù)據(jù)!\n");
printf("\n\n");
return 0;
}
//【1】修改數(shù)據(jù)之刪除記錄
int delStudent()
{
struct Student *p1, *p2, *head;
char str_num[20];
printf("\n請輸入您要刪除的學(xué)號信息:");
scanf("%s", str_num);
p1 = ReadData();
p2 = p1->next;
head = p1;
while(p2!=NULL)
{
if(strcmp(p1->num,str_num)==0) {
WriteData_wb(p2);
}
else if(strcmp(p2->num,str_num)==0) {
p1->next = p2->next;
WriteData_wb(head);
}
p2 = p2->next;
p1 = p1->next;
}
if(p2!=NULL)
printf("數(shù)據(jù)庫中沒有存儲您要刪除的數(shù)據(jù)!\n");
printf("\n\n");
return 0;
}
//【2】修改數(shù)據(jù)之修改記錄
int change1()
{
void menu_print_in(void);
struct Student *p1, *p2, *head;
char str_num[20];
printf("請輸入您要修改的學(xué)號信息:");
scanf("%s", str_num);
p1 = ReadData();
p2 = p1->next;
head = p1;
while(p2!=NULL)
{
if(strcmp(p1->num,str_num)==0) {
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p1->num,p1->name,p1->sex,
&p1->age,p1->phone,p1->address,p1->birthday,p1->mail);
WriteData_wb(head);
}
else if(strcmp(p2->num,str_num)==0)
{
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p2->num,p2->name,p2->sex,
&p2->age,p2->phone,p2->address,p2->birthday,p2->mail);
WriteData_wb(head);
}
p2 = p2->next;
p1 = p1->next;
}
if(p2!=NULL)
printf("數(shù)據(jù)庫中沒有存儲您要刪除的數(shù)據(jù)!\n");
return 0;
}
void start() //歡迎界面
{
system("color 1E");
printf("\n\n\n\n\n\n\n\n\n\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("\t\t\t⊙ ⊙\n");
printf("\t\t\t⊙ 歡迎使用學(xué)生信息管理系統(tǒng) ⊙\n");
printf("\t\t\t⊙ ⊙\n");
printf("\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("\n\t\t\t\t系統(tǒng)開始啟動.........\n");
printf("===============================================================================\r");
for(int i=1;i<80;i++)
{
Sleep(40);
printf(">");
}
system("CLS");
welcome();
}
void welcome()//登錄界面
{
system("CLS");
system("color 2");
printf("\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★ 歡迎使用學(xué)生信息管理系統(tǒng) ★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★ 設(shè)計(jì)者:吳敬超 ★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★ 日期:2016.7.1 ★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★★★★★★★★★★★★★★★★\n");
printf("\n\t\t\t按任意鍵繼續(xù)...");
getchar();
system("CLS");
menu();
}
//主菜單
void menu()
{
void addStudent();
void query();
int File_name();
void change();
system("CLS");
system("color D");
printf("\t\t\t★★★★★★主菜單※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.錄入學(xué)生信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.查詢學(xué)生信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.修改學(xué)生信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 4. 退出系統(tǒng) ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3'&&a!='4') {
printf("錯誤,請輸入正確的號碼!\n");
putchar('\a');
getchar();
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
a = getchar();
}
switch(a) {
case '1': File_name();addStudent();
break;
case '2': File_name();query();
break;
case '3': File_name();change();
break;
case '4': exit(0);
break;
}
getchar();
}
int File_name()
{
printf("\n\t\t請輸入您要打開的文件:");
if(scanf("%s", filename)!=1)
printf("\a error!");
return 0;
}
//二級菜單之添加數(shù)據(jù)
void addStudent()
{
int Creat_num();
system("cls");
getchar();
system("CLS");
system("color B");
printf("\t\t\t★★★★★★添加數(shù)據(jù)※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1. 新建文件 ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※ 2. 增添數(shù)據(jù) ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※ 3. 返回菜單 ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※\n");
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3')
{
printf("錯誤,請輸入正確的號碼!\n");
putchar('\a');
getchar();
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
a = getchar();
}
switch(a) {
case '1': WriteData_wb(Creat(Creat_num()));
printf("\n新建文件成功且數(shù)據(jù)已成功保存\n");
system("pause");
system("cls");
addStudent();
break;
case '2': WriteData_ab(Creat(Creat_num()));
printf("\n數(shù)據(jù)已成功添加\n");
system("pause");
system("cls");
addStudent();
break;
case '3': system("cls");
getchar();
menu();
break;
}
}
//二級菜單之查詢數(shù)據(jù)
void query()
{
system("cls");
getchar();
while(1)
{
system("CLS");
system("color C");
printf("\t\t\t★★★★★查詢數(shù)據(jù)※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.全部查詢 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.學(xué)號查詢 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.姓名查詢 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 4.返回菜單 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3'&&a!='4')
{
printf("錯誤,請輸入正確的號碼!\n");
putchar('\a');
getchar();
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
a = getchar();
}
switch(a) {
case '1': display();system("pause");getchar();
break;
case '2': query_num();system("pause");getchar();
break;
case '3': query_name();system("pause");getchar();
break;
case '4': system("cls");getchar();menu();
break;
}
}
}
int Creat_num() {
printf("\n\t\t請輸入您要添加的數(shù)據(jù)個數(shù):");
int n;
if(scanf("%d", &n)!=1) {
printf("\a error!");
}
return n;
}
//二級菜單之修改數(shù)據(jù)/
void change()
{
system("cls");
getchar();
while(1)
{
system("CLS");
system("color A");
printf("\t\t\t★★★★★★修改數(shù)據(jù)※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.刪除記錄 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.修改記錄 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.返回菜單 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3')
{
printf("錯誤,請輸入正確的號碼!\n");
putchar('\a');
getchar();
printf("\n\t\t請輸入功能前的序號選擇服務(wù)項(xiàng)目:");
a = getchar();
}
switch(a) {
case '1': delStudent();
printf("\n\n已成功刪除指定數(shù)據(jù)\n");
system("pause");
getchar();
break;
case '2': change1();
printf("\n\n已成功修改指定數(shù)據(jù)\n");
system("pause");
getchar();
break;
case '3': system("cls");
getchar();
menu();
break;
}
}
}
//輸入輸出提示欄
void menu_print_in() {
printf("------------------------------------------------------------------------\n");
printf("學(xué)號 姓名 性別 年齡 電話 地址 生日 郵件 \n");
printf("------------------------------------------------------------------------\n");
}
void menu_print_out(void) {
printf("--------------------------------------------------------------------------\n");
printf("學(xué)號 姓名 性別 年齡 電話 地址 生日 郵件 \n");
printf("--------------------------------------------------------------------------\n");
}
//主函數(shù)
int main()
{
start();
return 0;
}
更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
欄 目:C語言
下一篇:OpenCV圖像分割中的分水嶺算法原理與應(yīng)用詳解
本文標(biāo)題:C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/938.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什


