C語言實現(xiàn)學(xué)籍管理系統(tǒng)課程設(shè)計
本文實例為大家分享了C語言實現(xiàn)學(xué)籍管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
學(xué)校的課程設(shè)計,自己完成后整理了一下。
自己用鏈表實現(xiàn)的一個較簡單的學(xué)籍管理系統(tǒng),都是通過一些鏈表以及文件的基本操作完成。
功能實現(xiàn)
1-錄入學(xué)生信息。
2-查詢學(xué)生信息。
3-修改學(xué)生信息 。
4-刪除學(xué)生信息。
5-顯示學(xué)生信息。
6-統(tǒng)計信息報表。
7-讀盤,存盤。
注:一些getchar()以及換行符是我為了讓界面美觀自己加的。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#include<windows.h>
#define LEN sizeof(struct _stu)
typedef struct _stu
{
? ? long int id; ? ? ? ?//學(xué)號
? ? char name[20]; ? ? ?//姓名
? ? char sex[10]; ? ? ? //性別
? ? char teacher[20]; ? //老師
? ? int years; ? ? ? ? ?//年齡
? ? char date[20]; ? ? ?//入學(xué)時間
? ? float score; ? ? ? ?//入學(xué)成績
? ? struct _stu *next; ?//指向下個結(jié)點的指針
}Stu;
int count = 0;//鏈表長度,學(xué)生總數(shù)
char choice_s;//選擇
void Show();//登陸界面
void Menu();//顯示主菜單
Stu *Insert(Stu *pHead);//錄入
Stu *Find(Stu *pHead, int id);
void Find_sum(Stu *pHead);//查詢
void print(Stu *p);//顯示
void Change(Stu *pHead, int id);//修改
Stu *Delete(Stu *pHead, int id);//刪除
void printAll(Stu *pHead);//顯示全部學(xué)生信息(總)
void printAll_1(Stu *pHead);//顯示全部學(xué)生信息(姓名升序)
void printAll_2(Stu *pHead);//顯示全部學(xué)生信息(成績降序)
void data_statistics(Stu *pHead);//數(shù)據(jù)統(tǒng)計,打印報表
Stu *read_file(Stu *pHead);//讀盤
void DeleteLink(Stu *pHead);//銷毀鏈表
void save_file(Stu *pHead);//存盤
int main()
{
? ? SetConsoleTitle("西安郵電大學(xué)學(xué)籍管理系統(tǒng)");?? ??? ?//頭文件<windows.h>
? ? int i = 0;
? ? long int id;
? ? Stu *pHead = NULL;
? ? system("color 5A");?? ??? ??? ??? ??? ?//頭文件<windows.h>,改變程序背景及字體顏色
? ? Show();
? ? pHead = read_file(pHead);
? ? while(1)
? ? {
? ? ? ? Menu();
? ? ? ? switch(choice)
? ? ? ? {
? ? ? ? case '1':
? ? ? ? ? ? pHead = Insert(pHead);
? ? ? ? ? ? break;
? ? ? ? case '2':
? ? ? ? ? ? Find_sum(pHead);
? ? ? ? ? ? break;
? ? ? ? case '3':
? ? ? ? ? ? printf("\n\n");
? ? ? ? ? ? printf("\t輸入要修改學(xué)生學(xué)號: ");
? ? ? ? ? ? scanf("%ld",&id);
? ? ? ? ? ? Change(pHead,id);
? ? ? ? ? ? break;
? ? ? ? case '4':
? ? ? ? ? ? printf("\n\n");
? ? ? ? ? ? printf("\t輸入要刪除學(xué)生學(xué)號: ");
? ? ? ? ? ? scanf("%ld",&id);
? ? ? ? ? ? pHead = Delete(pHead,id);
? ? ? ? ? ? break;
? ? ? ? case '5':
? ? ? ? ? ? printAll(pHead);
? ? ? ? ? ? break;
? ? ? ? case '6':
? ? ? ? ? ? data_statistics(pHead);
? ? ? ? ? ? break;
? ? ? ? case '7':
? ? ? ? ? ? printf("\n\n");
? ? ? ? ? ? printf("\t學(xué)生總數(shù)為:%d\n",count);
? ? ? ? ? ? printf("\n");
? ? ? ??? ? ?? ?printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? break;
? ? ? ? case '0':
? ? ? ? ? ? save_file(pHead);
? ? ? ? ? ? DeleteLink(pHead);?? ?//銷毀鏈表
? ? ? ? ? ? printf("\n\n\n");
? ? ? ? ? ? printf("\t謝謝使用!\n");
? ? ? ? ? ? exit(0);
? ? ? ? }
? ? }
? ? return 0;
}
void Show()?? ?//自己添加的登陸功能,比較簡單,可以自己修改添加
{
? ? int i;
? ? char passwd[18];
? ? char *ch = "WELCOME";
? ? printf("\n\n\n");
? ? printf("\t\t\t----------------------------------------------------------\n");
? ? printf("\t\t\t| ? ? ? ? ? ? ? ? Welcome To The System ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t\t\t----------------------------------------------------------\n");
? ? printf("\t\t\t ? ? ? ? ? ? ? ? ?用戶名登陸:");
? ?do
? ? {
? ? ? ? scanf("%s",passwd);
? ? ? ? if((strcmp(passwd,"1234567")) != 0)
? ? ? ? {
? ? ? ? ? ? printf("\a");//錯誤警示
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t\t\t ? ? ? ? ? ? ? ? ?用戶名錯誤,請重新輸入:");
? ? ? ? ? ? fflush(stdin);
? ? ? ? }
? ? }while((strcmp(passwd,"1234567")) != 0);
? ? for(i = 1; i <= 100; i++)
? ? {
? ? ? ? printf("\n\n\n\n\n\n\n\n\n");
? ? ? ? printf("\t\t\t\t\t加載:%d%%",i);
? ? ? ? Sleep(9);?? ??? ??? ??? ?//頭文件<windows.h>,停頓9毫秒
? ? ? ? system("cls");?? ??? ??? ?//頭文件<windows.h>,清屏
? ? }
? ? printf("\n\n\n\n\n\n\n\n\n");
? ? printf("\t\t\t\t\t加載完畢");
? ? Sleep(666);
? ? system("cls");
? ? printf("\n\n\n\n\n\n\n\n\n");
? ? printf("\t\t\t\t\t");
? ? for(i = 0; i < 7; i++)
? ? {
? ? ? ? printf("%c",ch[i]);
? ? ? ? Sleep(333);
? ? }
? ? printf("\n\n\n");
? ? printf("\t\t\t\t\t\t\t請按任意鍵繼續(xù)...");
}
void Menu()?? ??? ?//主菜單
{
? ? getch();
? ? system("cls");//清屏
? ? system("color 0D");
? ? printf("\n\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? 歡迎使用學(xué)籍管理系統(tǒng) ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 1-錄入學(xué)生信息 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 2-查詢學(xué)生信息 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 3-修改學(xué)生信息 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 4-刪除學(xué)生信息 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 5-顯示學(xué)生信息 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 6-統(tǒng)計信息報表 ? ? ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 7-學(xué)生總數(shù)(.讀盤) ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 0-退出程序(.存盤) ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t----------------------------------------------------------\n");
? ? printf("\t請選擇功能(0-7): ");
? ? fflush(stdin);
? ? scanf("%c",&choice_s);
? ? if(choice_s < '0' || choice_s > '7')
? ? {
? ? ? ? printf("\t請重新選擇功能(0-7): ");
? ? ? ? scanf("%c",&choice_s);
? ? }
? ? system("cls");//清屏
}
Stu *Insert(Stu *pHead)?? ??? ?//創(chuàng)建鏈表
{
? ? Stu *pEnd;
? ? Stu *pNew,*q;
? ? pNew = (Stu *)malloc(LEN);
? ? q = pHead;
? ? pEnd = pHead;
? ? printf("\n\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ?***錄入學(xué)生信息*** ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t該學(xué)生的學(xué)號為: ");
? ? scanf("%ld",&pNew->id);
? ? while(pNew->id < 0)
? ? {
? ? ? ? printf("\t學(xué)號不能為負(fù),請重新輸入");
? ? ? ? scanf("%ld",&pNew->id);
? ? }
? ? while(q)
? ? {
? ? ? ? if(q->id == pNew->id)
? ? ? ? {
? ? ? ? ? ? printf("\t學(xué)號已存在,請重新輸入: ");
? ? ? ? ? ? scanf("%ld",&pNew->id);
? ? ? ? ? ? q = pHead;
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? q = q->next;
? ? }
? ? printf("\t學(xué)生姓名: ");
? ? scanf("%s",pNew->name);
? ? printf("\t學(xué)生性別: ");
? ? scanf("%s",pNew->sex);
? ? printf("\t學(xué)生老師: ");
? ? scanf("%s",pNew->teacher);
? ? printf("\t學(xué)生年齡: ");
? ? scanf("%d",&pNew->years);
? ? while(pNew->years < 0)
? ? {
? ? ? ? printf("\t年齡不能為負(fù),請重新輸入:");
? ? ? ? scanf("%d",&pNew->years);
? ? }
? ? printf("\t學(xué)生入學(xué)時間: ");
? ? scanf("%s",pNew->date);
? ? while(strlen(pNew->date) < 8)
? ? {
? ? ? ? printf("\t入學(xué)日期(年/月/日),請重新輸入; ");
? ? ? ? scanf("%s",pNew->date);
? ? }
? ? printf("\t學(xué)生入學(xué)成績: ");
? ? scanf("%f",&pNew->score);
? ? while(pNew->score < 0 || pNew->score > 750)
? ? {
? ? ? ? printf("\t入學(xué)成績(0-750),請重新輸入: ");
? ? ? ? scanf("%f",&pNew->score);
? ? }
? ??
? ? pNew->next = NULL;
? ? if(pHead == NULL)
? ? ? ? pHead = pNew;
? ? else
? ? {
? ? ? ? while(pEnd && pEnd->next != NULL)
? ? ? ? ? ? pEnd = pEnd->next;
? ? ? ? pEnd->next = pNew;
? ? }
? ? count++;
? ? printf("\n");
? ? printf("\t請按任意鍵繼續(xù)...");
? ? return pHead;
}
void Find_sum(Stu *pHead)?? ?//4種查詢方式?? ?
{
? ? char choice;
? ? long int id;
? ? float score;
? ? char teacher[20];
? ? Stu *p = pHead;
? ? printf("\n\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ?***查詢學(xué)生信息*** ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? ? 1.按學(xué)號查詢 ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? ? 2.按成績查詢 ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? ? 3.按老師和學(xué)號查詢 ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? ? 4.按老師和成績查詢 ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? ? 0.返回主菜單 ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t請選擇查詢方式: ");
? ? fflush(stdin);
? ? scanf("%c",&choice);
? ? while(choice < '0' || choice > '4')
? ? {
? ? ? ? printf("\t請重新選擇功能(0-4): ");
? ? ? ? fflush(stdin);
? ? ? ? scanf("%c",&choice);
? ? }
? ? switch(choice)
? ? {
? ? case '1':
? ? ? ? printf("\t輸入要查詢學(xué)生學(xué)號: ");
? ? ? ? scanf("%ld",&id);
? ? ? ? print(Find(pHead,id));?? ??? ?//調(diào)用print(),F(xiàn)ind()函數(shù)
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '2':
? ? ? ? printf("\t輸入要查詢學(xué)生成績: ");
? ? ? ? scanf("%f",&score);
? ? ? ? while(p && p->score != score) p = p->next;
? ? ? ? if(!p)
? ? ? ? {
? ? ? ? ? ? printf("\t對不起,沒有查詢到該學(xué)生信息.\n");
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? ? ? while(p)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(p->score == score)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '3':
? ? ? ? printf("\t輸入要查詢老師和其學(xué)生學(xué)號: ");
? ? ? ? scanf("%s %ld",teacher,&id);
? ? ? ? while(p && strcmp(p->teacher,teacher) != 0 && p->id != id) p = p->next;
? ? ? ? if(!p)
? ? ? ? {
? ? ? ? ? ? printf("\t對不起,沒有查詢到該信息.\n");
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? ? ? while(p)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(strcmp(p->teacher,teacher) == 0 && p->id == id)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '4':
? ? ? ? printf("\t輸入要查詢老師和其學(xué)生成績: ");
? ? ? ? scanf("%s %f",teacher,&score);
? ? ? ? while(p && strcmp(p->teacher,teacher) != 0 && p->score != score) p = p->next;
? ? ? ? if(!p)
? ? ? ? {
? ? ? ? ? ? printf("\t對不起,沒有查詢到該信息.\n");
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? ? ? while(p)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(strcmp(p->teacher,teacher) == 0 && p->score == score)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '0':
? ? ? ? return;
? ? }
}
Stu *Find(Stu *pHead, int id)
{
? ? Stu *p = pHead;
? ? while(p && p->id != id) p = p->next;
? ? return p;
}
void print(Stu *p)
{
? ? if(!p)
? ? {
? ? ? ? printf("\t對不起,沒有查詢到該學(xué)生信息.\n");
? ? }
? ? else
? ? {
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? getchar();
? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? }
}
void Change(Stu *pHead, int id)
{
? ? Stu *pNew = Find(pHead,id);?? ??? ?調(diào)用Find()函數(shù)
? ? Stu *q = pHead;
? ? char choice;
? ? int num;
? ? int flag = 0;
? ? if(pNew)
? ? {
? ? ? ? printf("\n\n");
? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? printf("\t| ? ? ? ? ? ? ? ? ?***修改學(xué)生信息*** ? ? ? ? ? ? ? ? ? |\n");
? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? printf("\t該學(xué)生信息如下: \n");
? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? print(pNew);?? ??? ??? ?//調(diào)用print()函數(shù)
? ? ? ? printf("\t---------------------------------------------------------\n");
? ? ? ? printf("\t1.學(xué)號\t2.姓名3.性別\t4.老師\t5.年齡\n");
? ? ? ? printf("\t6.入學(xué)時間\t7.入學(xué)成績\t8.全部修改\t0.返回主菜單\n");
? ? ? ? printf("\t請選擇修改類型: ");
? ? ? ? fflush(stdin);
? ? ? ? scanf("%c",&choice);
? ? ? ? while(choice < '0' || choice > '8')
? ? ? ? {
? ? ? ? ? ? printf("\t請重新選擇功能(0-8): ");
? ? ? ? ? ? fflush(stdin);
? ? ? ? ? ? scanf("%c",&choice);
? ? ? ? }
? ? ? ? switch(choice)
? ? ? ? {
? ? ? ? case '1':
? ? ? ? ? ? printf("\t請輸入新的學(xué)號: ");
? ? ? ? ? ? scanf("%ld",&pNew->id);
? ? ? ? ? ? while(pNew->id < 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t學(xué)號不能為負(fù),請重新輸入: ");
? ? ? ? ? ? ? ? scanf("%ld",&pNew->id);
? ? ? ? ? ? }
? ? ? ? ? ? num = pNew->id;
? ? ? ? ? ? while(q)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(q->id == num)
? ? ? ? ? ? ? ? ? ? flag++;
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? ? ? }
? ? ? ? ? ? if(flag > 1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t學(xué)號已存在,請重新選擇!\n");?? ?//學(xué)號已存在,直接返回主菜單
? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '2':
? ? ? ? ? ? printf("\t請輸入新的學(xué)生姓名: ");
? ? ? ? ? ? scanf("%s",pNew->name);
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '3':
? ? ? ? ? ? printf("\t請輸入新的學(xué)生性別: ");
? ? ? ? ? ? scanf("%s",pNew->sex);
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '4':
? ? ? ? ? ? printf("\t請輸入新的學(xué)生老師: ");
? ? ? ? ? ? scanf("%s",pNew->teacher);
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '5':
? ? ? ? ? ? printf("\t請輸入新的學(xué)生年齡: ");
? ? ? ? ? ? scanf("%d",&pNew->years);
? ? ? ? ? ? while(pNew->years < 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t年齡不能為負(fù),請重新輸入:");
? ? ? ? ? ? ? ? scanf("%d",&pNew->years);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '6':
? ? ? ? ? ? printf("\t請輸入新的入學(xué)時間: ");
? ? ? ? ? ? scanf("%s",pNew->date);
? ? ? ? ? ? while(strlen(pNew->date) < 8)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t入學(xué)日期(年/月/日),請重新輸入; ");
? ? ? ? ? ? ? ? scanf("%s",pNew->date);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '7':
? ? ? ? ? ? printf("\t請輸入新的入學(xué)成績: ");
? ? ? ? ? ? scanf("%f",&pNew->score);
? ? ? ? ? ? while(pNew->score < 0 || pNew->score > 750)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t入學(xué)成績(0-750),請重新輸入: ");
? ? ? ? ? ? ? ? scanf("%f",&pNew->score);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '8':
? ? ? ? ? ? printf("\t學(xué)號: ");
? ? ? ? ? ? scanf("%ld",&pNew->id);
? ? ? ? ? ? while(pNew->id < 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t學(xué)號不能為負(fù),請重新輸入: ");
? ? ? ? ? ? ? ? scanf("%ld",&pNew->id);
? ? ? ? ? ? }
? ? ? ? ? ? num = pNew->id;
? ? ? ? ? ? while(q)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(q->id == num)
? ? ? ? ? ? ? ? ? ? flag++;
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? ? ? }
? ? ? ? ? ? if(flag > 1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t學(xué)號已存在,請重新選擇!");
? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? printf("\t學(xué)生名稱: ");
? ? ? ? ? ? scanf("%s",pNew->name);
? ? ? ? ? ? printf("\t學(xué)生性別: ");
? ? ? ? ? ? scanf("%s",pNew->sex);
? ? ? ? ? ? printf("\t老師: ");
? ? ? ? ? ? scanf("%s",pNew->teacher);
? ? ? ? ? ? printf("\t年齡: ");
? ? ? ? ? ? scanf("%d",&pNew->years);
? ? ? ? ? ? while(pNew->years < 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t年齡不能為負(fù),請重新輸入:");
? ? ? ? ? ? ? ? scanf("%d",&pNew->years);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\t入學(xué)時間: ");
? ? ? ? ? ? scanf("%s",pNew->date);
? ? ? ? ? ? while(strlen(pNew->date) < 8)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t入學(xué)日期(年/月/日),請重新輸入; ");
? ? ? ? ? ? ? ? scanf("%s",pNew->date);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\t入學(xué)成績: ");
? ? ? ? ? ? scanf("%f",&pNew->score);
? ? ? ? ? ? while(pNew->score < 0 || pNew->score > 750)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t入學(xué)成績(0-750),請重新輸入: ");
? ? ? ? ? ? ? ? scanf("%f",&pNew->score);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? getchar();
? ? ? ? ? ? return;
? ? ? ? case '0':
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? return;
? ? ? ? }
? ? }
? ? else
? ? {
? ? ? ? printf("\t對不起,沒有查詢到該學(xué)生信息.\n");
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? }
}
Stu *Delete(Stu *pHead, int id)
{
? ? Stu *pNew = Find(pHead,id);?? ??? ?//調(diào)用Find()函數(shù)
? ? Stu *pTemp,*q;
? ? char ch;
? ? pTemp = pHead;
? ? q = pTemp;
? ? if(pTemp == NULL)
? ? {
? ? ? ? printf("\t暫無學(xué)生信息,請先添加!");
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return pHead;
? ? }
? ? if(pNew)
? ? {
? ? ? ? print(pNew);
? ? ? ? printf("\t是否刪除(y/n): ");
? ? ? ? scanf("%c",&ch);
? ? ? ? count--;
? ? ? ? switch(ch)
? ? ? ? {
? ? ? ? case 'y':
? ? ? ? ? ? while(pTemp)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(pTemp->id == id)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if(pHead == pTemp)?? ?//特殊情況,刪除頭節(jié)點
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? pHead = pTemp->next;
? ? ? ? ? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? ? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? ? ? ? ? ? ? return pHead;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? q->next = pTemp->next;
? ? ? ? ? ? ? ? ? ? free(pTemp);
? ? ? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? ? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? ? ? ? ? ? ? return pHead;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? q = pTemp;
? ? ? ? ? ? ? ? pTemp = pTemp->next;
? ? ? ? ? ? }
? ? ? ? case 'n':
? ? ? ? ? ? return pHead;
? ? ? ? }
? ? }
? ? else
? ? {
? ? ? ? printf("\t對不起,沒有查詢到該學(xué)生信息.\n");
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return pHead;
? ? }
}
void printAll(Stu *pHead)?? ??? ?//3種顯示方式,通過冒泡排序
{
? ? char choice;
? ? Stu *pNew = pHead;
? ? printf("\n\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ?***顯示學(xué)生信息*** ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 1.按學(xué)號升序顯示 ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 2.按姓名升序顯示 ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 3.按成績降序顯示 ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 0.返回主菜單 ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t請選擇顯示方式: ");
? ? fflush(stdin);
? ? scanf("%c",&choice);
? ? while(choice < '0' || choice > '3')
? ? {
? ? ? ? printf("\t請重新選擇功能(0-3): ");
? ? ? ? fflush(stdin);
? ? ? ? scanf("%c",&choice);
? ? }
? ? switch(choice)
? ? {
? ? case '1':
? ? ? ? if(pNew == NULL)
? ? ? ? {
? ? ? ? ? ? printf("\t對不起,無學(xué)生信息!\n");
? ? ? ? }
? ? ? ? else
? ? ? ? {?? ?
? ? ? ? ?? ?//冒泡排序
? ? ? ? ? ? Stu *p = NULL;
? ? ? ? ? ? Stu *q = NULL;
? ? ? ? ? ? Stu *r = NULL;
? ? ? ? ? ? Stu n;
? ? ? ? ? ? for(p = pHead; p; p = p->next)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for(q = p->next; q; q = q->next)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if(p->id > q->id)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? n = *p;
? ? ? ? ? ? ? ? ? ? ? ? *p = *q;
? ? ? ? ? ? ? ? ? ? ? ? *q = n;
? ? ? ? ? ? ? ? ? ? ? ? r = p->next;
? ? ? ? ? ? ? ? ? ? ? ? p->next = q->next;
? ? ? ? ? ? ? ? ? ? ? ? q->next = r;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? ? ? while(pNew)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",pNew->id,pNew->name,pNew->sex,pNew->teacher,pNew->years,pNew->date,pNew->score);
? ? ? ? ? ? ? ? pNew = pNew->next;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '2':
? ? ? ? printAll_1(pHead);
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '3':
? ? ? ? printAll_2(pHead);
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '0':
? ? ? ? return;
? ? }
}
void printAll_1(Stu *pHead)
{
? ? Stu *pNew = pHead;
? ? if(pNew == NULL)
? ? {
? ? ? ? printf("\t對不起,無學(xué)生信息!\n");
? ? }
? ? else
? ? {
? ? ? ? Stu *p = NULL;
? ? ? ? Stu *q = NULL;
? ? ? ? Stu *r = NULL;
? ? ? ? Stu n;
? ? ? ? for(p = pHead; p; p = p->next)
? ? ? ? {
? ? ? ? ? ? for(q = p->next; q; q = q->next)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(strcmp(p->name,q->name) > 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? n = *p;
? ? ? ? ? ? ? ? ? ? *p = *q;
? ? ? ? ? ? ? ? ? ? *q = n;
? ? ? ? ? ? ? ? ? ? r = p->next;
? ? ? ? ? ? ? ? ? ? p->next = q->next;
? ? ? ? ? ? ? ? ? ? q->next = r;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(pNew)
? ? ? ? {
? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",pNew->id,pNew->name,pNew->sex,pNew->teacher,pNew->years,pNew->date,pNew->score);
? ? ? ? ? ? pNew = pNew->next;
? ? ? ? }
? ? }
}
void printAll_2(Stu *pHead)
{
? ? Stu *pNew = pHead;
? ? if(pNew == NULL)
? ? {
? ? ? ? printf("\t對不起,無學(xué)生信息!\n");
? ? }
? ? else
? ? {
? ? ? ? Stu *p = NULL;
? ? ? ? Stu *q = NULL;
? ? ? ? Stu *r = NULL;
? ? ? ? Stu n;
? ? ? ? for(p = pHead; p; p = p->next)
? ? ? ? {
? ? ? ? ? ? for(q = p->next; q; q = q->next)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(p->score < q->score)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? n = *p;
? ? ? ? ? ? ? ? ? ? *p = *q;
? ? ? ? ? ? ? ? ? ? *q = n;
? ? ? ? ? ? ? ? ? ? r = p->next;
? ? ? ? ? ? ? ? ? ? p->next = q->next;
? ? ? ? ? ? ? ? ? ? q->next = r;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(pNew)
? ? ? ? {
? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",pNew->id,pNew->name,pNew->sex,pNew->teacher,pNew->years,pNew->date,pNew->score);
? ? ? ? ? ? pNew = pNew->next;
? ? ? ? }
? ? }
}
void data_statistics(Stu *pHead)?? ??? ?//3種打印方式,通過多遍遍歷鏈表
{
? ? char choice;
? ? float score;
? ? Stu *p,*q,*a,*b;
? ? p = q = a = b = pHead;
? ? printf("\n\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ?***統(tǒng)計信息報表*** ? ? ? ? ? ? ? ? ? |\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 1.分性別打印報表 ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 2.分成績打印報表 ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 3.分性別和成績打印報表 ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t| ? ? ? ? ? ? ? ? ? 0.返回主菜單 ? ? ? ? ? ? ? ? ? ? ? ?|\n");
? ? printf("\t---------------------------------------------------------\n");
? ? printf("\t請選擇顯示方式: ");
? ? fflush(stdin);
? ? scanf("%c",&choice);
? ? while(choice < '0' || choice > '3')
? ? {
? ? ? ? printf("\t請重新選擇功能(0-3): ");
? ? ? ? fflush(stdin);
? ? ? ? scanf("%c",&choice);
? ? }
? ? switch(choice)
? ? {
? ? case '1':
? ? ? ? printf("\t男: \n");
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(p)
? ? ? ? {
? ? ? ? ? ? if(strcmp(p->sex,"男") == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t女: \n");
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(q)
? ? ? ? {
? ? ? ? ? ? if(strcmp(q->sex,"女") == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",q->id,q->name,q->sex,q->teacher,q->years,q->date,q->score);
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '2':
? ? ? ? printf("\t你想要以多少分為分界線: ");
? ? ? ? scanf("%f",&score);
? ? ? ? printf("\t%.1f分以下: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(p)
? ? ? ? {
? ? ? ? ? ? if(p->score < score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t%.1f分及以上: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(q)
? ? ? ? {
? ? ? ? ? ? if(q->score >= score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",q->id,q->name,q->sex,q->teacher,q->years,q->date,q->score);
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '3':
? ? ? ? printf("\t你想要以多少分為分界線: ");
? ? ? ? scanf("%f",&score);
? ? ? ? printf("\t%.1f分及以上男生: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(a)
? ? ? ? {
? ? ? ? ? ? if(strcmp(a->sex,"男") == 0 && a->score >= score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",a->id,a->name,a->sex,a->teacher,a->years,a->date,a->score);
? ? ? ? ? ? ? ? a = a->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? a = a->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t%.1f分及以上女生: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(b)
? ? ? ? {
? ? ? ? ? ? if(strcmp(b->sex,"女") == 0 && b->score >= score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",b->id,b->name,b->sex,b->teacher,b->years,b->date,b->score);
? ? ? ? ? ? ? ? b = b->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? b = b->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t%.1f分以下男生: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(p)
? ? ? ? {
? ? ? ? ? ? if(strcmp(p->sex,"男") == 0 && p->score < score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? p = p->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t%.1f分以下女生: \n",score);
? ? ? ? printf("\t學(xué)號\t姓名\t性別\t老師\t年齡\t入學(xué)時間\t入學(xué)成績\n");
? ? ? ? printf("\t-------------------------------------------------------------\n");
? ? ? ? while(q)
? ? ? ? {
? ? ? ? ? ? if(strcmp(q->sex,"女") == 0 && q->score < score)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("\t%ld\t%s\t%s\t%s\t%d\t%s\t%.1f\n",q->id,q->name,q->sex,q->teacher,q->years,q->date,q->score);
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? q = q->next;
? ? ? ? }
? ? ? ? printf("\n");
? ? ? ? printf("\t請按任意鍵繼續(xù)...");
? ? ? ? getchar();
? ? ? ? return;
? ? case '0':
? ? ? ? return;
? ? }
}
void DeleteLink(Stu *pHead)?? ??? ?//銷毀鏈表
{
? ? Stu *q = pHead;
? ? if(pHead == NULL)
? ? ? ? return;
? ? while(pHead)
? ? {
? ? ? ? q = pHead->next;
? ? ? ? free(pHead);
? ? ? ? pHead = q;
? ? }
?? ?pHead = NULL;
}
Stu *read_file(Stu *pHead)?? ??? ?//讀盤,直接連接到鏈表
{
? ? FILE *fp;
? ? Stu *pEnd,*pNew;
? ? fp = fopen("d:\\code\\student.txt","r");?? ??? ?//文件名自己設(shè)置
? ? if(fp == NULL)
? ? {
? ? ? ? printf("\t打開失敗,按任意鍵退出!");
? ? ? ? getchar();
? ? }
? ? pNew = (Stu *)malloc(LEN);?? ?//分配內(nèi)存
? ? while(fscanf(fp,"%ld %s %s %s %d %s %f",&pNew->id,pNew->name,pNew->sex,pNew->teacher,&pNew->years,pNew->date,&pNew->score) != EOF)
? ? {
? ? ? ? count++;?? ?//記錄
? ? ? ? pNew->next = NULL;
? ? ? ? if(pHead == NULL)
? ? ? ? ? ? pHead = pNew;
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? pEnd = pHead;
? ? ? ? ? ? while(pEnd && pEnd->next != NULL)
? ? ? ? ? ? ? ? pEnd = pEnd->next;
? ? ? ? ? ? pEnd->next = pNew;
? ? ? ? }
? ? ? ? pNew = (Stu *)malloc(LEN);?? ?//再次分配內(nèi)存
? ? }
? ? free(pNew);?? ?//最后一次分配內(nèi)存是沒有用到的,要釋放掉
? ? fclose(fp);
? ? getchar();
? ? return pHead;
}
void save_file(Stu *pHead)?? ??? ?//存盤
{
? ? FILE *fp;
? ? Stu *p = pHead;
? ? fp = fopen("d:\\code\\student.txt","w");?? ??? ?//文件名自己設(shè)置
? ? if(fp == NULL)
? ? {
? ? ? ? printf("\t打開失敗,按任意鍵退出!");
? ? ? ? getchar();
? ? }
? ? if(p == NULL)
? ? ? ? getch();
? ? else
? ? {
? ? ? ? while(p)
? ? ? ? {
? ? ? ? ? ? fprintf(fp,"%ld %s %s %s %d %s %.1f",p->id,p->name,p->sex,p->teacher,p->years,p->date,p->score);
? ? ? ? ? ? fprintf(fp,"\n");
? ? ? ? ? ? p = p->next;
? ? ? ? }
? ? ? ? printf("\n\n");
? ? ? ? printf("\t存盤成功!");
? ? }
? ? fclose(fp);
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語言模擬實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
- C語言實現(xiàn)學(xué)籍信息管理系統(tǒng)
- C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計
- C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)程序設(shè)計
- C語言實現(xiàn)學(xué)籍管理系統(tǒng)
- C語言學(xué)籍管理系統(tǒng)源代碼
- C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
- C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計
- C語言實現(xiàn)簡單學(xué)生學(xué)籍管理系統(tǒng)
- C語言動態(tài)鏈表實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
相關(guān)文章
C++學(xué)習(xí)小結(jié)之二進制轉(zhuǎn)換
這篇文章主要介紹了C++學(xué)習(xí)小結(jié)之二進制轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-07-07
淺析C++中strlen函數(shù)的使用與模擬實現(xiàn)strlen的方法
這篇文章主要介紹了strlen函數(shù)的使用與模擬實現(xiàn)strlen的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表操作詳解
鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的常用操作,感興趣的可以學(xué)習(xí)一下2022-07-07

