Đề tài: Chương trình quản lý sinh viên - Pdf 11

MỤC LỤC
MỤC LỤC 01
PHẦN I: GIỚI THIỆU CHUNG 02
1. Khái niệm về danh sách móc nối 02
2. Các phép toán trên danh sách 02
3. Giới thiệu về chương trình quản lý sinh viên 02
PHẦN II: GIỚI THIỆU CÁC THÀNH PHẦN CHÍNH CỦA CHƯƠNG
TRÌNH 03
1. Sơ đồ các lớp đối tượng 03
2. Mô tả các lớp đối tượng 04
PHẦN III: GIỚI THIỆU CÁC CHỨC NĂNG TRONG CHƯƠNG
TRÌNH 08
PHẦN IV: MÃ NGUỒN CHƯƠNG TRÌNH 09
PHẦN V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CHƯƠNG
TRÌNH 22
PHẦN 1: GIỚI THIỆU CHUNG
1.Khái niệm về danh sách móc nối
Danh sách là tập hợp các nút (ô nhớ) không liền kề, có kiểu dữ liệu
xác định và giữa chúng có liên lạc với nhau bởi con trỏ địa chỉ.
Số nút của danh sách gọi là chiều dài của danh sách. Một danh sách có
chiều dài bằng 0 là một danh sách rỗng.
1
Danh sách móc nối kép là tập hợp các nút mà mỗi nút có 2 mối liên
kết với 2 phần tử khác trong danh sách.
Một nút trong danh sách móc nối kép có dạng:
Trong đó:
LEFT: con trỏ trái: lưu trữ địa chỉ nút trước
RIGHT: con trỏ phải: Lưu trữ địa chỉ nút sau
Danh sách móc nối kép có dạng:
2.Các phép toán trên danh sách
• Tạo mới một danh sách

• Kiểu dữ liệu float:
3
SINHVIEN info (đối tượng
thành phần); * left, * right
getnode
freenode
Createlist
Nhaplist
Showlist
Listsize
Push_first
Push_last
Push_after
Search_name
Search_maso
Del_first
Del_last
Del_node_name
Del_node_maso
Clear_list
Sort_list_dtb
Ghi_file
Doc_file
*first, *last
Maso,hoten,namsinh,gio
itinh,quequan,lop,dtb
Nhập
Hiện
NODE LIST
SINHVIEN

• Createlist: Hàm khởi tạo 1 danh sách mới
Cho giá trị các con trỏ quản lý địa chỉ hai nút đầu và cuối danh sách
móc nối kép về con trỏ NULL.
• Nhaplist: Hàm nhập n sinh viên vào danh sách
Thuật toán:
B1: Nhập số lượng sinh viên cần nhập vào danh sách (n)
B2: Khởi tạo biến đếm i, i=0
B3: So sánh i với n. Nếu i<n -> B4, nếu i>=n -> B6
B4: Thêm 1 nút vào danh sách (push_last())
B5: Tăng i lên 1 -> Quay lại bước 2
B6: Kết thúc.
• Showlist: Hàm hiện danh sách sinh viên
Thuật toán:
4
B1: Khởi tạo 1 con trỏ trỏ vào nút đầu tiên
B2: Nếu nút đó khác NULL->B3, ngược lại ->kết thúc
B3: Hiện nút đó
B4: Dịch con trỏ sang phải 1 nút->B2
• Listsize: Hàm đếm số lượng nút trong danh sách
Thuật toán:
B1: Khởi tạo 1 con trỏ, biến đếm I (i=0)
B2: Cho con trỏ trỏ vào nút đầu tiên
B3: Nếu nút đó khác NULL ->B4, ngược lại->B6
B4: dịch con trỏ sang phải 1 nút
B5: Tăng i lên 1->B3
B6: Trả về i;
• Push_first: Hàm thêm 1 nút vào đầu danh sách.
Thuật toán:
B1: Khởi tạo con trỏ, tạo 1 nút.
B2: Neu nút đó =NULL ->B3.

Nếu i<số nút->B7
B7: so sánh i với vt
Nếu i=vt->B8
Nếu i khác vt->B11
B8: Tạo 1 nút mới, cho p trỏ đến nút đó.
B9: Nối nút sau q với p.
B10: Nối q với p.
B11: Dịch q sang phải 1 nút, tăng i lên 1.
• Search_name: Hàm tìm kiếm 1 nút theo tên trong danh sách
Thuật toán:
B1: Tạo con trỏ q để duyệt, cho q trỏ đến nút đầu tiên
B2: Nếu nút đó bằng NULL-> Kết thúc
Nếu nút đó khác NULL->B3
B3: So sánh dữ liệu tên của nút đó với dữ liệu tên cần tìm
Nếu đúng->B5
Nếu sai->B4
B4: dịch q sang phải 1 nút ->B2
B5: Trả về giá trị là 1 nút.
• Search_maso: Hàm tìm kiếm 1 nút theo mã số trong danh sách
Thuật toán:
B1: Tạo con trỏ q để duyệt, cho q trỏ đến nút đầu tiên
B2: Nếu nút đó bằng NULL-> Kết thúc
Nếu nút đó khác NULL->B3
B3: So sánh dữ liệu mã số của nút đó với dữ liệu mã số cần tìm
Nếu đúng->B5
Nếu sai->B4
B4: dịch q sang phải 1 nút ->B2
B5: Trả về giá trị là 1 nút.
• Del_first: Hàm xóa nút đầu tiên trong danh sách
Thuật toán:

B4: Nếu nút cần xóa là nút đầu tiên->del_first().
B5: Nếu nút cần xóa là nút cuối->del_last().
B5: Trường hợp còn lại->B6
B6: Cho liên kết phải nút bên trái nút cần xóa trỏ đến nút bên phải nút
cần xóa.
B7: Cho liên kết trái nút bên phải nút cần xóa trỏ đến nút bên trái nút
cần xóa.
B8: Cho liên kết phải trái nút cần xóa về NULL.
B9: delete nút cần xóa.
• Clear_list: Hàm hủy toàn bộ danh sách
Thuật toán:
B1: Tạo 1 con trỏ q để duyệt, cho q trỏ đến nút đầu tiên.
B2: Nếu danh sách rỗng-> Kết thúc
7
Ngược lại->B3
B3: Dịch nút đầu tiên sang bên phải 1 nút
B4: Cho liên kết phải q = NULL
B5: Nếu nút đầu tiên khác rỗng, cho liên kết trái nút đó là NULL
B6: delete q;
B7: Cho q trỏ đến nút đàu tiên->B2;
• Sort_list_dtb: Hàm sắp xếp danh sách theo điểm trung bình
tăng dần
Thuật toán: (Sử dụng thuật toán sắp xếp nổi bọt – Bubble sort)
B1: Tạo 2 con trỏ i, j để duyệt. Cho i trỏ đến nút đầu tiên, j trỏ đến nút
cuối cùng.
B2: So sánh i với nút cuối cùng.
Nếu i= nút cuối cùng->kết thúc
Nếu i khác nút cuối -> B3
B3: So sánh j với i
Nếu j =i->B

1) Tìm kiếm 1 sinh viên theo tên trong danh sách
2) Tìm kiếm 1 sinh viên theo mã số trong danh sách
6. Xóa 1 sinh viên trong danh sách.
1) Xóa sinh viên theo mã số xác định
2) Xóa sinh viên theo tên xác định
3) Xóa toàn bộ danh sách
7. Sắp xếp danh sách sinh viên theo điểm trung binh
PHẦN IV: MÃ NGUỒN CHƯƠNG TRÌNH
“baitaplon.h”
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<windows.h>
#include<fstream.h>
#include<stdlib.h>
#include<stdio.h>
class SINHVIEN
{
public:
char maso[6],hoten[30],gioitinh[5],quequan[10],lop[6];
int namsinh;
float dtb;
void nhap();
void hien();
};
class NODE
{
public:
SINHVIEN info;
NODE *left,*right;

void hien();
void xuly();
};
“SINHVIEN.cpp”
#include"baitaplon.h"
void SINHVIEN::nhap()
{
cout<<"\n Nhap ma so sinh vien: "; cin.ignore().get(maso,6);
cout<<"\n Nhap ho ten: "; cin.ignore().get(hoten,30);
cout<<"\n Nhap gioi tinh: "; cin.ignore().get(gioitinh,5);
cout<<"\n Nhap nam sinh: "; cin>>namsinh;
10
cout<<"\n Nhap que quan: "; cin.ignore().get(quequan,10);
cout<<"\n Nhap lop: "; cin.ignore().get(lop,6);
cout<<"\n Nhap diem trung binh: "; cin>>dtb;
}
void SINHVIEN::hien()
{
cout<<"+"<<setw(5)<<maso<<"+"<<" "
<<setw(16)<<hoten<<"+"<<" "
<<setw(11)<<namsinh<<"+"<<" "
<<setw(8)<<gioitinh<<"+"<<" "
<<setw(12)<<quequan<<"+"<<" "
<<setw(8)<<lop<<"+"<<" "
<<setw(5)<<dtb<<"+"; cout<<endl;
}
“NODE.cpp”
#include"baitaplon.h"
NODE* NODE::getnode()
{

for(i=0;i<n;i++)
{
cout<<"\n sinh vien thu "<<i+1;
push_last(p);
}
}
void LIST::showlist()
{
NODE *p;
p=first;
cout<<"\n+ + + + + +
+ +";
cout<<"\n|MA SO| HO TEN SV | NAM SINH |GIOI TINH| QUE
QUAN | LOP | DTB |";
cout<<"\n+ + + + + +
+ +\n";
while(p!=NULL)
{
cout<<" ";
p->info.hien();
cout<<"+ + + + + +
+ +\n";
p=p->right;
}

}
int LIST::listsize()
{
NODE *p;
int i=0;

if(last==NULL)
first=last=p;
else
{
last->right=p;
p->left=last;
last=p;
}
}
void LIST::push_after(NODE *l)
{
NODE *p,*q;
13
int vt,i;
q=first;
cout<<"\n Nhap vi tri can chen vao sau: "; cin>>vt;
if(vt>listsize())
{
vt=listsize();
push_last(l);
}
if(vt<=listsize())
for(i=0;i<=listsize();i++)
if(vt==i)
{
p=getnode();
// noi cac nut sau nut q vao nut moi p
p->right=q->right;
q->right->left=p;
// noi nut q voi p

}
int LIST::del_first()
{
if(first==NULL) return 2;
else
{
first=first->right;
return 1;
}
}
int LIST::del_last()
{
if(first==NULL)
return 2;
else
{
NODE *p=last->left;
p->right = NULL;
last->left= NULL;
last=p;
return 1;
}
}
int LIST::del_node_maso(NODE *l,char xoamaso[])
{
NODE *delnode=search_maso(l,xoamaso);
if(first==NULL)
return 0;
if(delnode==NULL)
return 3;

return 1;
}
if(delnode==last)
{del_last();
return 1;
}
else
{
(delnode->left)->right = (delnode->right);
(delnode->right)->left=(delnode->left);
delnode->right=NULL;
delnode->left=NULL;
delete delnode;
return 1;
}
16
}
void LIST::clear_list(NODE *l)
{
NODE *q=first;
while(q!=NULL)
{
first=first->right;
q->right=NULL;
if(first!=NULL)
first->left=NULL;
delete q;
q=first;
}
}

b.nhap();
a.write((char*)&b,sizeof(b));
}
a.close(); //Dong tep
cout<<"\n Da ghi du lieu vao tep SinhVien.dat";
}
void LIST::doc_file()
{
SINHVIEN b;
fstream a; //Khao bao doi tuong ghi/doc
a.open("SinhVien.dat",ios::in+ios::binary);//Mo de doc theo kieu nhi
phan
while(!a.eof()) //Trong khi con chua den cuo^i' file
{
a.read((char*)&b,sizeof(b));
{
cout<<"\n ";b.hien();
}
}
a.close(); //Dong tep
cout<<"\n\n";
}
“MENU.cpp”
#include”baitaplon.h”
void MENU::hien()
{
cout<<setiosflags(ios::left);
cout<<"\n\n ===> M E N U <===\n"
<<setw(40)<<"\n 1. Nhap thong tin sinh vien"
<<" 5. Tim sinh vien trong danh sach"

{
a.ghi_file();
}
if(kn==3)
{
a.doc_file();
}
}
if(ch==2)
{
a.showlist();
}
if(ch==3)
{
cout<<"\n\n\n";
19
cout<<"So phan tu cua List la : \n ";
cout<<a.listsize();
}
if(ch==4)
{
int kc; //kieu chen
cout<<"\n 1.Chen dau";
cout<<"\n 2.Chen cuoi";
cout<<"\n 3.Chen sau 1 nut";
cout<<"\n Chon kieu chen: "; cin>>kc;
if(kc==1)
{
a.push_first(l1);
}

}
if(ch==6)
{
int kx;
cout<<"\n 1. Xoa theo ma so ";
cout<<"\n 2. Xoa theo ten ";
cout<<"\n 3. Xoa toan bo danh sach";
cout<<"\n Nhap kieu xoa: "; cin>>kx;
if(kx==1)
{
char ms2[6];
cout<<"\n Nhap ma so can xoa: ";
cin.ignore().get(ms2,6);
if(a.del_node_maso(l1,ms2)==1)
cout<<"\n Xoa thanh cong";
else
cout<<"\n Xoa that bai";
}
if(kx==2)
{
char ten2[30];
cout<<"\n Nhap ten can xoa: ";
cin.ignore().get(ten2,30);
if(a.del_node_name(l1,ten2)==1)
cout<<"\n Xoa thanh cong";
else
cout<<"\n Xoa that bai";
}
if(kx==3)
{

hơn.
22


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status